C++ 使用嵌套模板类来携带类型信息
c++ using nested template classes for carrying type information
可能的重复项:
我必须在哪里以及为什么必须放置"模板"和"类型名称"关键字?
当我尝试在VS 2012中编译以下代码时,我在消费者类的typedef行上出现错误,开头为:
error C2143: syntax error : missing ';' before '<'
这是编译器的问题还是代码不再有效的 c++?(它从中提取的项目肯定用于在旧版本的VS和gcc iirc上毫无问题地构建,但那是大约10年前的事了!
struct TypeProvider
{
template<class T> struct Container
{
typedef vector<T> type;
};
};
template<class Provider>
class Consumer
{
typedef typename Provider::Container<int>::type intContainer;
typedef typename Provider::Container<double>::type doubleContainer;
};
有一个解决方法,但我只是想知道是否需要它:
struct TypeProvider
{
template<typename T> struct Container { typedef vector<T> type; };
};
template<template<class T> class Container, class Obj>
struct Type
{
typedef typename Container<Obj>::type type;
};
template<typename Provider>
class TypeConsumer
{
typedef typename Type<Provider::Container, int>::type intContainer;
typedef typename Type<Provider::Container, double>::type doubleContainer;
};
您需要帮助编译器知道Container
是一个模板:
template<class Provider>
class Consumer
{
typedef typename Provider:: template Container<int>::type intContainer;
typedef typename Provider:: template Container<double>::type doubleContainer;
};
这在这篇 SO 帖子的接受答案中得到了很好的解释。
相关文章:
- Keil armcc 生成类型信息名称,即使使用 --no_rtti_data
- 错误:未定义对"静脉类型信息::电池访问"的引用
- 如何在编译过程中输出C 类型信息
- 如何在C 中检查确切的类型信息(具有CV-REF-POIRT特征)
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- 给定DDS主题名称,可以在运行时确定主题类型信息
- 使用友元函数从多态类中检索类型信息
- 如何在函数模板中隐式推导数组中元素的类型信息
- 使用标准类型的动态类型信息实例化标识符
- 超载功能没有上下文类型信息
- 对"vtable for "命名空间继承的未定义引用 对"类型信息"的未定义引用
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- Visual Studio-使用PDB进行调试,但缺少类型信息
- 如何在不同的上下文(例如线程)中保留原始异常类型信息
- C++正在传输运行时条件类型信息
- C++虚拟表上的虚拟定义器和类的类型信息
- C++测试宏定义的类型信息值
- 编译器不可知的运行时类型信息
- C++类型信息