在阅读这个问题时,我发现了一个奇怪的观点:
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
// ^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)
既然typename,Baseclass<T>::Baseclass应该注入类名,而不是构造函数.据我所知,情况与此相同:
template <typename T>
class Base
{
public:
typedef short some_type;
};
template <typename T>
class Sub : public Base<T>
{
public:
using typename Base<T>::some_type;
};
Run Code Online (Sandbox Code Playgroud)
为了确保,我写了一个测试代码.
#include <iostream>
template <typename T>
class Base
{
public:
Base() { std::cout << "A::A()\n"; }
Base(int) { std::cout << "A::A(int)\n"; }
Base(const char *) { std::cout << "A::A(const …Run Code Online (Sandbox Code Playgroud) c++ typename using-declaration language-lawyer inheriting-constructors
我发现构造函数继承的语法略显奇怪.以下示例运行良好,但我不明白为什么我需要指定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)