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

时间:2011-06-07 20:49:07

标签: 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 ++呢?

1 个答案:

答案 0 :(得分:4)

innocuousBase内对derivOfDoom<>的无限制使用被解释为innocuousBase<VT>,就像在该上下文中derivOfDoom的无限制使用将被解释为derivOfDoom<VT>一样。我不记得这是否符合标准的行为,但解决方法是微不足道的:完全限定innocuousBase所以编译器知道你指的是innocuousBase类模板,而不是{ {1}}基类:

innocuousBase<VT>