我有一个
template <int N> class Base
和
class Derived : public Base<1>
...有没有办法int N
从 a 的定义中访问Derived::myMethod()
(而不是得到编译器错误“使用未声明的标识符'N'”)?
更准确地说,我想做
void Derived::myMethod() {
for (int n=0; n<N; n++) { ...
模板参数具有模板的范围,但您可以在模板中定义一个可供派生类使用的嵌套常量:
template <int N> class Base {
public: // or protected:
static const int theN = N;
};
另一种选择是您可以模板派生类:
template <int N>
class Derived : public Base<N>
{
void myMethod()
{
for (int i = 0; i < N; ++i)
//
}
};
这就是我上面评论的意思:
class Base{
public:
Base(int value = 1) : value_(value){} //don't need to use default param but can
private:
int value_
}
class Derived : public Base
{}
为什么要模板化 N?你需要专攻整个班级吗?另一种方法是“虚拟化”根据您设置为“专业化”的标准从模板调用的非成员函数。
编辑:模板类中方法的部分特化