我一直在寻找一种方法来对我的C ++结构进行某种反思(以帮助进行序列化以及一般的数据管理)。我找到了这个答案: C++ preprocessor: avoid code repetition of member variable list
这似乎是一个很好的解决方案,直到我实现它并且Visual Studio的IntelliSense爆炸。到处都是红色的波浪!即使编译器使用REFLECTABLE宏,它也不了解结构中的成员变量名。
我实施错了吗?有什么我可以做的让IntelliSense了解变量名称?有没有更好的替代方法来获得与IntelliSense良好匹配的C ++反射?它必须能够迭代结构的成员,并在运行时获取变量的名称。
答案 0 :(得分:1)
您可以选择三个选项。
首先,您可以使用__INTELLISENSE__
为intellisense定义替代方案:
struct Person
{
Person(const char *name, int age)
:
name(name),
age(age)
{
}
private:
#ifdef __INTELLISENSE__
const char * name;
int age;
#else
REFLECTABLE
(
(const char *) name,
(int) age
)
#endif
};
但是,如果您不想重复成员变量但想要摆脱红线,则可以禁用智能感知(解释here),因为它似乎完全被破坏了。 / p>
现在,如果您仍希望获得良好的诊断和代码完成,那么最好使用其他IDE或编辑器。由于大多数IDE或编辑都没有对此进行爆炸。对于IDE,您可以尝试KDevelop,CodeLite,Netbeans,Eclipse,QtCreator等...对于编辑,您可以尝试emacs,vim,sublime等...(理想情况下,使用clang集成)。它们都比visual studio提供更好的诊断和代码完成。