【发布时间】:2011-07-22 23:09:37
【问题描述】:
有没有办法声明一个指向不完整类型的指针,该类型将由实现中的 typedef 设置?
这是我想要的示例:
#ifndef TEST_H
#define TEST_H
namespace std {
class string; // THIS WON'T WORK!
}
struct Test {
std::string *value;
};
#endif
string 是 basic_string 的 typedef,因此示例中的代码不起作用。我可以声明一个不完整的 std::basic_string 类型,但这看起来是一种解决方法。
我知道编译器不会为 typedef 生成符号,并且可能会在 typedef 中为不同文件中的不同类型使用相同的名称。但是由于指针是指针(至少指向编译器),所以应该可以做类似的事情。
编辑:这只是一个极简主义的工作示例。在我真正的问题中,我有一个 Facade,它使用库中的一个类,只有 Facade 需要知道(不,它不是 std::string,库不是 stl)。我并不担心循环包含,但由于我的项目中的很多文件都包含这个 Facade(直接或间接),我担心编译时间,所以我只想将库文件包含在 Facade 的实现文件中。
【问题讨论】:
-
许多编译器提供了一个
<stringfwd>,它提供了一个工作前向声明。
标签: c++