c++ - 是否可以转发声明命名空间内的 typedef?

标签 c++ struct typedef forward-declaration

我环顾四周,我不太清楚其他类似问题是否能回答这个问题。

// lib.h
namespace lib_namespace
{
  struct lib_struct
  {
    typedef std::vector<LibObject> struct_value;
  };

  typedef lib_struct::struct_value lib_value; // compiler points here
};

// my.h
// attempt at forward declaration
namespace lib_namespace { class lib_value; };
...

// my.cpp
#include "lib.h"

我得到一个可以理解的重新定义编译器错误,但是有没有办法转发声明该 typedef?

我的意图是避免将 lib.h 添加为我正在创建的库之外的依赖项。也许有更好的方法来实现这一点?

编辑:为了澄清,我试图避免向所有将使用我正在创建的库的项目文件添加额外的包含目录行,因为我正在使用第三方库,而上述情况是我卡住了。所以如果我在 my.cpp 中包含 lib.h 而不是 my.h 就可以了。

最佳答案

你的编译器会提示,因为 lib.hmy.h 是独立的头文件,它们彼此不知道。此外,与实际的 class 不同,typedef 不支持前向声明。

假设,您不想#include"lib.h",那么您可以创建一个单独的 header ,其中包含typedef lib_struct::struct_value lib_value; 和与之相关的相关部分。 #include 在需要的地方添加新 header 。

关于c++ - 是否可以转发声明命名空间内的 typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476586/

相关文章:

c++ - 为作者-读者寻找最好的 boost 文件锁定机制

c - 我是否创建一个临时 c 结构并通过套接字发送它?

c++ - Typedef vector 迭代器

c++ - 在不同变体模板类的实例之间复制

c++ - C++ 中的同时覆盖和重载

c - 具有可变长度保留空间的固定长度结构

c# - C# visual studio 编译器如何处理 struct/NULL 比较?

c++ - 用最近定义的结构替换前向声明的结构

c++ - 在 C/C++ 中使用 `typedef` 的暗角?

c++ - #if 预处理器指令可以嵌套在 C++ 中吗?