C++:有没有一种方法可以让这个反射宏与IntelliSense一起工作

C++: Is there a way to make this reflection macro work with IntelliSense?

本文关键字:反射 工作 一起 IntelliSense 有没有 方法 一种 C++      更新时间:2023-10-16

我一直在寻找一种方法来对我的C++结构进行某种反思(以帮助序列化以及一般的数据管理)。我找到了这个答案:C++预处理器:避免成员变量列表的代码重复

这似乎是一个很好的解决方案,直到我实现了它,Visual Studio的IntelliSense爆炸了。到处都是红色的歪歪扭扭的!它无法使用REFLECTABLE宏理解结构中的成员变量名称,即使编译器可以理解。

我实施错了吗?我能做些什么让IntelliSense理解变量名吗?有没有更好的替代方法来获得与IntelliSense配合良好的C++反射?它必须能够迭代结构的成员,并在运行时获得变量的名称。

您有三个选项可以选择。

首先,您可以使用__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
};

但是,如果你不想重复成员变量,但想去掉红线,你可以禁用intellisense(在这里解释),因为它似乎完全被破坏了。

现在,如果您仍然希望有良好的诊断和代码完成,那么最好使用另一个IDE或编辑器。因为大多数IDE或编辑器都不会对此进行分解。对于IDE,你可以尝试KDevelop、CodeLite、Netbeans、Eclipse、QtCreator等。对于编辑器,你可以试试emacs、vim、sublime等。(理想情况下,使用clang集成)。它们都提供了比visualstudio更好的诊断和代码完成。