我想出了利用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)'是一个函数调用而不是宏。 –