我有一个班级Helper
:
template <typename T, template <typename> E>
class Helper {
...
};
我有另一个类模板Exposure
,它将Helper
继承,同时将自身作为模板模板参数E
传递。我还需要专门化Exposure
。因此,我想写下面的内容:
template <>
class Exposure<int> : public Helper<int, Exposure> {
Exposure() : Helper<int, Exposure>() {
...
};
...
};
不幸的是,这不会编译。 gcc抱怨道:
Exposure.h:170:错误:模板参数列表中参数2的类型/值不匹配“模板&gt; class ExposureHelper'
Exposure.h:170:错误:预期类型''的常量,得到'曝光'
我做错了吗?对于我正在尝试做的事情,是否有解决方法?
答案 0 :(得分:2)
如果你真的想传递模板而不是类
template <typename T, template<typename> class E>
class Helper {
};
template <typename T>
class Exposure;
template <>
class Exposure<int> : public Helper<int, Exposure > {
};
或者如果您的意图不同
template <typename T, typename E>
class Helper {
};
template <typename T>
class Exposure;
template <>
class Exposure<int> : public Helper<int, Exposure<int> > {
};
答案 1 :(得分:0)
在Helper的第一个模板中,您不需要说第二个参数是模板:
template <typename T, typename E>
class Helper {
...
};
你可以用模板作为参数声明一个:
Helper<vector<int>, vector<char> > h;
但在第二个模板中,您有一个循环定义。您的Exposure课程取决于您的Exposure课程。这将创建一个循环引用,Helper类需要先定义Exposure才能继承Exposure。您可能需要重新构建课程。