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

我试图拥有一个派生类(普通模板),它具有一个模板类型的变量,该变量的模板类参数是派生类的基类(普通模板,派生类的相同参数)的类型(一个与变量).这使得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?

最佳答案
无限制地使用derivedOfDoom<>被解释为innocuousBase< VT>,因为在该上下文中对derivedOfDoom的不合格使用将被解释为derivOfDoom< VT&gt ;.我不记得这是否符合标准的行为,但解决方法是微不足道的:完全符合无害的基础,所以编译器知道你是指无害的Base类模板,而不是无害的BASE< VT>基础类:

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

转载注明原文:c++ 模板类的变量,其中模板类模板参数设置为带有变量的派生模板的基本模板 - 代码日志