有没有办法在不引用其模板类型的情况下转发声明指向类的指针

Is there any way to forward declare a pointer to a class without referencing its template type?

本文关键字:转发 情况下 声明 指针 类型 引用 有没有      更新时间:2023-10-16

In foo.h:

#include <vector>
class A {
    int x;
};
typedef std::vector<A> AVector;

我想要的是把它放在bar.h中:

#include <vector>
<<< some forward declaration of AVector here>>>;
class B {
    AVector *myVector;
};

我想将"AVector"声明到 bar.h 中,而 bar.h 不必包含类 A 的定义。由于类 B 只需要知道它是一个指针,而不是指针内的细节,我希望有某种方法可以声明这一点。

注意:我知道我可以只声明"void *",然后在不同的点进行投射。我宁愿不要失去类型安全。任何失去类型安全性的解决方案都无法解决我的问题。

从Jean-BaptisteYunès对这个问题的评论中,你可以转发声明一个std::vector,而没有A的完整定义。这意味着这有效:

class A;
typedef std::vector<A> AVector;
class B {
    AVector *myVector;
};