c++ - 调用基类构造函数而不命名其类

标签 c++ c++11 c++14

class MyDerived: public Incredble<Difficult< And<Complicated, Long>>, And<Even, Longer>, BaseClass, Name>
{
public:
  MyDerived();
}


MyDerived::MyDerived
: ???(params)
{}

有没有什么方法可以在不写全名和类型定义的情况下调用基本构造函数?

原因很明显是为了避免代码重复,并在基类模板参数中的某个细节发生变化时引入多个位置进行更改。

第 2 级:

template <uint32 C>
class MyDerived: public Incredble<Difficult< And<Complicated, Long>>, And<Even, Longer>, BaseClass, Name>
{
public:
  MyDerived();
}

template <uint32 C>
MyDerived::MyDerived<C> 
: ???(C)
{
}

最佳答案

你可以使用 injected-class-name . Incredible<...>::Incredible指的是它自己,因为 MyDerived不是类模板,非限定查找将在其基类的范围内查找:

MyDerived::MyDerived
: Incredble(params)
{}

如果Incredible是一个从属 名称,那么您需要对其进行限定。实际上,您可以简单地使用派生类型名称来限定基类的 injected-class-name (h/t Johannes Schaub-litb ):

MyDerived::MyDerived
: MyDerived::Incredible(params)
{}

这适用于所有情况。

关于c++ - 调用基类构造函数而不命名其类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39413091/

相关文章:

c++ - 使用 std::function 和通用 lambda 的函数重载:std::string 优于 int

c++ - 调用 xSemaphoreGive 后,xSemaphoreTake 不会恢复任务

c++ - 模板参数包累计积

C++:通用(转发)引用中不允许使用 const

c++ - 创建几个相互不兼容的数字类型

c++11 - 在 C++ 中将 NULL 转换为 SomeType* 有什么用?

c++ - 为什么我们不直接使用 Object 文件?

c++ - 为什么无法在可变参数模板中将尾随模板参数指定为默认值?

c++ - `vaddhn_high_s16` 实际上是做什么的?

c++ - 具有 C++ 虚函数时的 GDB 不完整类型