6
我正在寫一個類(在頭文件),需要下面的方法:正向聲明中嵌套命名空間
static const foo::bar::clz* getSomething(void);
因爲我不想污染與#include
我選擇的頭文件向前聲明clz
:
namespace foo
{
namespace bar
{
class clz;
}
}
但是,這是相當笨拙了。在C++ 11中有這樣一個可行的方法嗎?沿
class foo::bar::clz;
東西線仍,如果你沒有預見到它是否作爲一個class
,struct
或union
實現的還要好。 C++ 11語法學家是否也覆蓋了那個? (typename auto
可能是一個候選人,但我不是C++語法的專家)。
但是,當您向前聲明一個對象爲'struct'並在之後聲明它爲'class'時,您會受到警告。 –
@PaperBirdMaster誠然,編譯器通常會對此提出警告。儘管如此,這是合法的,而不是(本身)是危險的。這個警告可能是合理的,因爲「你確定你指的是你認爲的你?」這是我願意禁用的少數人之一。 – Angew
由於標準沒有涉及到的問題,比如名稱變形,至少在MSVC上,結構和類會發生不同的變形,所以如果你發現前向聲明錯誤,你會得到鏈接錯誤 –