[英]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
時,這可能會導致大量的重新編譯。 typedef
。 有點討厭,但它的確有效。 最后兩個就像做前向聲明但添加了typedef
。 它們減少了文件的相互依賴性,因為您很少修改typedef文件。
我會說在大多數情況下,中心包含的麻煩最有利。 小心點
只需使用class Bar;
。 這告訴C ++你宣布你有意定義Bar。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.