假设我正在使用一个模板类,其中包含一些简单的东西,例如:
template <class T>
class MyClass
我想使用 T 命名空间中的元素,例如 T 可以是字符串,我想使用
T::const_iterator myIterator;
...或类似的东西。我该如何实现? 可能,这不可能或非常简单,但我不知道。
谢谢解答!
最佳答案
默认情况下,如果 T
是您示例中的模板参数,则假定 T::some_member
不命名类型。您必须通过在其前面加上 typename
来明确指定它:
typename T::const_iterator myIterator;
这解决了下面示例中的一些解析问题
// multiplication, or declaration of a pointer?
T::const_iterator * myIterator;
为了让编译器甚至在实例化模板之前就可以解析它,你必须帮助它并使用 typename
,包括在那些它不会有歧义的情况下,比如第一个以上案例。 Template FAQ对此有更多的了解。
关于C++ 模板和访问命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958984/