我可以获得“迭代器”吗?对于模板类型,无论该类型是数组还是类似 STL 的容器?
这是我的例子:
template<typename TContainer>
class MyClass
{
public:
typedef typename SomeUnknownHelper<TContainer>::iterator iterator;
};
std::vector<int>::iterator i = MyClass<std::vector<int>>::iterator;
int *pi = MyClass<int[20]>::iterator;
基本上,我不知道如何编写SomeUnknownHelper
。
我知道我可以专门化 MyClass
本身,但在我的实际情况中,这会很麻烦,因为类很大。
Here's my example:
template<typename TContainer>
class MyClass
{
public:
typedef typename SomeUnknownHelper<TContainer>::iterator iterator;
};
std::vector<int>::iterator i = MyClass<std::vector<int>>::iterator;
int *pi = MyClass<int[20]>::iterator;
Basically, I don't know how to write SomeUnknownHelper
.
I know I could specialize MyClass
itself, but in my real-world case it would be a hassle because the class is large.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
decltype
和std::begin
可以轻松实现这一点:更好的选择可能是使用 Boost.Range:
That's easily doable with
decltype
andstd::begin
:An even better option might be using Boost.Range:
这只是一个专业,那能有多糟糕?
或者,您可以使用免费的
std::begin
/std::end
和auto
:That's only one single specialization, how bad could that be?
Alternatively, you can use the free
std::begin
/std::end
andauto
: