前向声明模板类的类型定义

Forward declaring a typedef for a template class

本文关键字:类型 定义 声明      更新时间:2023-10-16

我知道在c++中不能向前声明typedef,但我想知道下面问题的最佳解决方案是什么。我有一个头文件像这样声明MyClass:

#include <TemplateClassHeaders>
struct MyStruct
{
    // ...
}
typedef Really::Long::TemplateClassName<MyStruct> MyClass;

MyClass在很多地方使用,但主要是作为通过Qt信号槽机制传递的指针。向前声明将是所有需要的,但由于MyClass是一个类型定义,这将不起作用。是否有一种方法可以避免将myclass.h添加到使用指向MyClass的指针的每个头?

不能向前声明类型定义。但是如果你前向声明它所依赖的类,TemplateClassNameMyStruct,你应该能够定义MyClass

namespace Really {
  namespace Long {
    template <typename>
    class TemplateClassName;
  }
}
class MyStruct;
typedef Really::Long::TemplateClassName<MyStruct> MyClass;
MyClass *p = 0;