相关疑难解决方法(0)

C++在继承构造函数中使用带有typename的声明

在阅读这个问题时,我发现了一个奇怪的观点:

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

13
推荐指数
1
解决办法
857
查看次数

c ++ 11继承模板构造函数

我发现构造函数继承的语法略显奇怪.以下示例运行良好,但我不明白为什么我需要指定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)

c++ inheritance constructor c++11 template-classes

8
推荐指数
1
解决办法
4793
查看次数