c++ - 带有模板类模板参数的模板类的变量设置为带有变量的派生模板的基本模板

标签 c++ templates

我正在尝试拥有一个派生类(普通模板),该类具有模板类型的变量,该变量的模板类参数具有基类的类型(普通模板,与派生类相同的参数)派生类(带有变量的类)。这让 VC++ 对我非常生气,我无法平息它的愤怒。这是一个简单的例子:

template<template<typename VT> class CT, typename VT> struct encapThing {};

template<typename VT> struct innocuousBase {};

template<typename VT> struct derivOfDoom : public innocuousBase<VT>
{
    encapThing<innocuousBase, VT> ohgodhelp; //C3200
};

它会抛出一个 C3200,说它需要一个类模板。现在,我可以理解为什么这可能会认为模板中存在模板的递归循环,即使 实际上 并非如此。否则我如何说服 VC++?

最佳答案

不合格使用innocuousBase derivOfDoom<>内部被解释为 innocuousBase<VT> ,就像不合格地使用 derivOfDoom在这种情况下将被解释为 derivOfDoom<VT> .我不记得这是否是符合标准的行为,但解决方法很简单:完全限定 innocuousBase所以编译器知道你指的是 innocuousBase类模板而不是 innocuousBase<VT>基类:

template<typename VT> struct derivOfDoom : innocuousBase<VT>
{
    encapThing<::innocuousBase, VT> ohgodhelp;
};

关于c++ - 带有模板类模板参数的模板类的变量设置为带有变量的派生模板的基本模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271452/

相关文章:

c++ - 在NTFS压缩目录中,如何读取文件压缩和未压缩的大小?

c++ - Netbeans C/C++ 项目中的代码相同但输出不同

c++ - 静态存储和大对象

c++ - 错误 : 'IOCTL_STORAGE_QUERY_PROPERTY' was not declared in this scop

c++ - DirectShow BindToObject 返回无效句柄

C++:如何返回模板类中定义的别名?

c++ - 为什么下面的非静态数据成员初始化在C++11中是无效的

c++ - 如何将多个模板传递给一个类

c++ - undefined reference 、模板结构和 constexpr 静态成员

c++ - 使用条件语句在运行时选择不同的模板化矩阵类