0

我有一堂课Helper

template <typename T, template <typename> E>
class Helper {
    ...
};

我有另一个类模板,它是在将自身作为模板模板参数传递Exposure时继承自。我也需要专攻。因此,我想写如下内容:HelperEExposure

template <>
class Exposure<int> : public Helper<int, Exposure> {
    Exposure() : Helper<int, Exposure>() {
        ...
    };
    ...
};

不幸的是,这不会编译。gcc 抱怨:

Exposure.h:170:错误:“模板>类 ExposureHelper”的模板参数列表中参数 2 的类型/值不匹配</p>

Exposure.h:170: 错误:期望一个''类型的常量,得到'Exposure'</p>

难道我做错了什么?我正在尝试做的事情有解决方法吗?

4

2 回答 2

2

if you really want to pass template rather then class

template <typename T, template<typename> class E>
class Helper {
};

template <typename T>
class Exposure;

template <>
class Exposure<int> : public Helper<int, Exposure > {
};

or if your intent is different

template <typename T, typename E>
class Helper {
};

template <typename T>
class Exposure;

template <>
class Exposure<int> : public Helper<int, Exposure<int> > {
};
于 2010-09-26T02:38:59.033 回答
0

在 Helper 的第一个模板中,您无需说第二个参数是模板:

template <typename T, typename E>
class Helper {
    ...
};

您可以使用模板作为参数声明一个:

Helper<vector<int>, vector<char> > h;

但是在您的第二个模板中,您有一个循环定义。您的 Exposure 等级取决于您的 Exposure 等级。这会创建一个循环引用,Helper 类需要先定义 Exposure,然后才能从 Exposure 继承。您可能需要重组您的课程。

于 2010-09-26T02:35:09.937 回答