指向不完整类型的typedef的指针

fba*_*ipe 4 c++

有没有办法声明一个指向不完整类型的指针,该指针将由实现中的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的实现文件中.

Lig*_*ica 5

不,这不对.

真的,在这一点上,你只需要#include <string>.它没有害处,因为你不能拥有循环依赖string:标准标题甚至不知道你的标题存在!

std::string*无论如何,A 通常是错误的.

  • 无论如何,`std :: string*通常都是错的.:真的...... +1 (2认同)