我想出了利用decltype
在.cpp文件中定義靜態成員,然後使用這個宏的想法:使用decltype定義靜態成員(智能感知不同意)
#define DEFINE_SYMBOL(x) decltype(x) x
這種方式,例如如果類Foo
聲明static int bar
,我可以做Foo.cpp中的以下內容:
DEFINE_SYMBOL(Foo::bar) = 1337;
這似乎有點「哈克」,但它有具有彈性在原始符號類型變化的優勢。例如,如果bar更改爲foo.hpp中的未簽名,則不需要更改foo.cpp。當成員類型複雜時,閱讀也更容易。
但是,如果靜態成員是私有的,則在Visual Studio 2015中,Intellisense會抱怨使用decltype(稱爲無法訪問)。抱怨很有道理,雖然程序編譯得很好。現在,我的問題是,Intellisense是錯誤的,還是不推薦使用decltype(以及爲什麼)?
gcc和clang接受它([Demo](http://coliru.stacked-crooked.com/a/c1bde595c6627cc7)),Msvc接受它。我認爲這是一個intellisense錯誤。 – Jarod42
看起來像IntelliSense認爲'DEFINE_SYMBOL(Foo :: bar)'是一個函數調用而不是宏。 –