有没有办法声明一个指向不完整类型的指针,该指针将由实现中的typedef设置?
这是我想要的例子:
#ifndef TEST_H
#define TEST_H
namespace std {
class string; // THIS WON'T WORK!
}
struct Test {
std::string *value;
};
#endif
Run Code Online (Sandbox Code Playgroud)
string是basic_string的typedef,因此示例中的代码不起作用.我可以声明一个不完整类型的std :: basic_string,但那看起来像一个变通方法.
我知道编译器不会为typedef生成符号,并且可能会在typedef中使用相同的名称来表示不同文件中的不同类型.但由于指针是指针(至少对编译器而言),因此应该可以做类似的事情.
编辑:这只是一个极简主义的工作例子.在我真正的问题中,我有一个Facade,它使用一个只有Facade应该知道的库中的类(不,它不是std :: string,而且库不是stl).我并不是真的担心循环包含,但由于我的项目中的很多文件包括这个Facade(直接或间接),我担心编译时间,所以我想只将库文件包含在Facade的实现文件中.
不,这不对.
真的,在这一点上,你只需要#include <string>.它没有害处,因为你不能拥有循环依赖string:标准标题甚至不知道你的标题存在!
std::string*无论如何,A 通常是错误的.