gpt4 book ai didi

c++ - 在 C++ 中转发声明一个类的 public typedef

转载 作者:可可西里 更新时间:2023-11-01 16:39:45 25 4
gpt4 key购买 nike

我试图通过使用前向声明并将#includes 移动到实现文件中来简化一堆头文件“include spaghetti”。但是,我不断遇到以下情况:

//Foo.h
#include "Bar.h"

class Foo
{
public:
void someMethod(Bar::someType_t &val);
};

//Bar.h
.
.
.
class Bar
{
public:
typedef std::vector<SomeClass> someType_t;
};

我想在尽可能多的情况下删除#include "Bar.h"。我还看到 Bar.h 中的 typedef 列在 Bar 类之外的情况。我假设这两种情况都可以用相同的方式解决。

有什么想法吗?

最佳答案

不幸的是,您没有太多选择,而且没有一个是完美的。

首先,两个明显但 Not Acceptable 解决方案:

  • 您可以转发声明 typedef,这完全违背了使用 typedef 的目的。
  • 您包含包含typedef 的文件,这是您要避免的。

比较有趣的解决方案:

  • 将所有相关的 typedef 包含在同一个包含文件中。但是,这会在类之间创建代码耦合。你应该只对相关的类这样做,否则你最终会得到一个包含文件,当你向该文件添加 typedef 时,这可能会导致大量的重新编译。
  • 对于每个类,都有一个包含 typedef 的单独包含。有点烦人,但它确实有效。

最后两个就像做前向声明,但添加了 typedef。它们减少了文件相互依赖性,因为您很少修改 typedef 文件。

我会说在大多数情况下,中央包含最有利于减少麻烦。请小心。

关于c++ - 在 C++ 中转发声明一个类的 public typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/836551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com