为什么主类模板中的成员未在专用类的范围内声明?

Ali*_*Ali 5 c++

请注意,您将在此处看到代码的过度简化版本。所以它可能看起来没用。然而,这不是问题。

问题是我有一个像这样的主要模板类:

// The primary template class
template<int N>
struct Start {
  int start;

  template<typename... Args>
  int operator()(Args... args) const {return start;}
};
Run Code Online (Sandbox Code Playgroud)

当我专门研究这个类模板时:

// Specialization for N=1:
template<>
struct Start<1> {
  int operator()(int i) const {return start;}
};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: ‘start’ was not declared in this scope
int operator()(int i) const {return start;}
Run Code Online (Sandbox Code Playgroud)

为什么start不在类的范围内声明Start<1>

  • 为什么专业类不识别主类的成员?

我很感激任何建议。

Bat*_*eba 9

模板特化与继承不同。

您的专业化与主模板完全不同。不共享数据成员或函数。

如果要共享一个公共成员,则使两种类型都继承自一个公共基类。