C ++:有没有办法让这个反射宏与IntelliSense一起工作?

时间:2014-09-21 20:35:35

标签: c++ boost reflection macros intellisense

我一直在寻找一种方法来对我的C ++结构进行某种反思(以帮助进行序列化以及一般的数据管理)。我找到了这个答案: C++ preprocessor: avoid code repetition of member variable list

这似乎是一个很好的解决方案,直到我实现它并且Visual Studio的IntelliSense爆炸。到处都是红色的波浪!即使编译器使用REFLECTABLE宏,它也不了解结构中的成员变量名。

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

1 个答案:

答案 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提供更好的诊断和代码完成。