C++ 模板和访问命名空间

标签 c++ class templates namespaces

假设我正在使用一个模板类,其中包含一些简单的东西,例如:

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/

相关文章:

c++ - system() 中的变量调用 C++

python - 正在定义的类型对象的类型提示

c++ - 为什么这是部分特化? (我能做什么?)

c++ - 在 Eclipse CDT 中构建 OpenFrameWorks 项目时 Raspberry Pi 崩溃

c++ - 为什么 vector.clear() 在循环中不起作用?

为 32 位和 64 位处理器强制对齐的 C++ 安全性

c++ - 如何将 C++ 关键字 "this"与成员函数 "operator="一起使用?

c# - 用于在平面文件中对字段进行分组和结构化数据的设计模式

php - Opencart:从另一个 Controller 调用方法

html - 选项卡上的问题