如何从派生类访问模板参数

How to access template parameters from a derived class?

本文关键字:参数 访问 派生      更新时间:2023-10-16

我有一个

template <int N> class Base

class Derived : public Base<1>

。有没有办法从Derived::myMethod()的定义内部访问int N(而不是得到编译器错误"使用未声明的标识符'N'")?

更准确地说,我想做

void Derived::myMethod() {
   for (int n=0; n<N; n++) { ...

template 参数具有模板的作用域,但您可以在模板中定义派生类可以使用的嵌套常量:

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? 你需要让整个班级专业化吗? 另一种方法是"虚拟化"根据您设置为"专用化"的条件从模板调用的非成员函数。

编辑:模板化类中方法的部分专用化