8 c++ inheritance constructor c++11 template-classes
我发现构造函数继承的语法略显奇怪.以下示例运行良好,但我不明白为什么我需要指定using sysTrajectory::sysTrajectory而不是using sysTrajectory<Real>::sysTrajectory<Real>从类模板继承?后者给出以下错误:expected ‘;’ before ‘<’ token using sysTrajectory<Real>::sysTrajectory<Real>;.
class sysRealTrajectory: public sysTrajectory<Real>
{
public:
/**
* Default constructor
*/
inline sysRealTrajectory(void);
using sysTrajectory::sysTrajectory;
/**
* Default destructor
*/
inline ~sysRealTrajectory(void);
};
Run Code Online (Sandbox Code Playgroud)
主要:
Real a;
a=5;
sysTrajectoryPoint<Real> TP0(1.0,a);
sysRealTrajectory Trajectory(TP0);
Run Code Online (Sandbox Code Playgroud)
这个语法
using sysTrajectory::sysTrajectory;
Run Code Online (Sandbox Code Playgroud)
命名所有构造函数sysTrajectory.这个语法
using sysTrajectory::sysTrajectory<Real>;
Run Code Online (Sandbox Code Playgroud)
仅命名接受模板参数的构造函数<Real>(是的,您可以这样做,您可以将显式模板参数传递给声明性上下文中的构造函数).您的基类似乎没有任何构造函数模板,因此您的编译器的解析器不会将其sysTrajectory作为模板名称,因此不接受<作为开放模板参数列表.因此语法错误.
对于要由模板参数显式限定的模板名称,必须知道名称才能引用模板.
即使你有一个构造函数模板,使用声明的规则也禁止这样做.它说
using声明不应命名template-id.
| 归档时间: |
|
| 查看次数: |
4793 次 |
| 最近记录: |