簡體   English   中英

Forward在c ++中聲明一個類的public typedef

[英]Forward declare a class's public typedef in c++

我正在嘗試通過使用前向聲明並將#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類之外的情況。 我假設兩種情況都可以用同樣的方式解決。

有任何想法嗎?

不幸的是,你沒有很多選擇,沒有一個是完美的。

首先,兩個明顯且不可接受的解決方案:

  • 你可以轉發聲明typedef ,這完全違背了使用typedef的目的。
  • 您包含要包含typedef的文件,您要避免使用該文件。

更有趣的解決方案:

  • 將所有相關的typedef包含在內並包含該文件。 這會創建類之間的代碼耦合。 你應該只用相關的類來做到這一點,否則你將最終得到一個神包含文件,當你向該文件添加一個typedef時,這可能會導致大量的重新編譯。
  • 對於每個類,都有一個單獨的include,其中包含typedef 有點討厭,但它的確有效。

最后兩個就像做前向聲明但添加了typedef 它們減少了文件的相互依賴性,因為您很少修改typedef文件。

我會說在大多數情況下,中心包含的麻煩最有利。 小心點

只需使用class Bar; 這告訴C ++你宣布你有意定義Bar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM