转发为模板类声明typedef

jah*_*aho 8 c++ templates typedef forward-declaration

我知道typedef不能在C++中进行前向声明,但我想知道什么是以下问题的最佳解决方案.我有一个头文件,声明MyClass如下:

#include <TemplateClassHeaders>

struct MyStruct
{
    // ...
}

typedef Really::Long::TemplateClassName<MyStruct> MyClass;
Run Code Online (Sandbox Code Playgroud)

MyClass在许多地方使用,但大部分只是作为指针通过Qt信号槽机制.前向声明将是所有需要的,但因为MyClass是一个不起作用的typedef.有没有办法避免将myclass.h添加到使用指针的每个标头MyClass

小智 10

您无法转发声明typedef.但是,如果你向前声明的类它依靠,无论是TemplateClassNameMyStruct,你应该能够确定MyClass.

namespace Really {
  namespace Long {
    template <typename>
    class TemplateClassName;
  }
}

class MyStruct;

typedef Really::Long::TemplateClassName<MyStruct> MyClass;

MyClass *p = 0;
Run Code Online (Sandbox Code Playgroud)

  • 这种丑陋,不必要的混乱需要得到解决。我们拥有十亿倍的高级功能,但诸如“嘿,按名称**使用此东西”这样的简单操作基本上是不可能的-人们需要类型的内部知识(别人定义的)基本上“重新创建” typedef! (2认同)