C++ 让宏添加成员和影响构造函数

C++ 让宏添加成员和影响构造函数,c++,c++98,C++,C++98,我想做的事情如下 class MyClass { list<FieldType> allFields; ADDFIELD(field1, Type, args); ADDFIELD(field2, Type, args); MyClass(){ MAKE_FIELD_LIST(); } } class-MyClass{ 列出所有字段; ADDFIELD(field1,Type,args); ADDFIELD(field2,T

我想做的事情如下

class MyClass {
    list<FieldType> allFields;
    ADDFIELD(field1, Type, args);
    ADDFIELD(field2, Type, args);

    MyClass(){
        MAKE_FIELD_LIST();
    }
}
class-MyClass{
列出所有字段;
ADDFIELD(field1,Type,args);
ADDFIELD(field2,Type,args);
MyClass(){
生成字段列表();
}
}
并将其扩展到

class MyClass {
    list<FieldType> allFields;
    Type field1 = Type(args);
    Type field2 = Type(args);
    MyClass(){
        allFields.put(field1);
        allFields.put(field2);
    }
}
class-MyClass{
列出所有字段;
类型字段1=类型(args);
类型字段2=类型(args);
MyClass(){
allFields.put(field1);
allFields.put(field2);
}
}

其中
MAKE\u FIELD\u LIST()
将使用
ADDFIELD
添加的每个字段放入列表对象
allFields
。过去,我使用宏来实现更简单的功能,但我不知道是否有一种方法可以存储并添加到变量名数组中,供
生成字段列表
使用,你可以做的一件事就是不用使用单独的成员,只需使用一个
元组即可。您甚至可以将该类与字符串的
映射关联,也可以访问正确的元素

class foo
{
public:
    template <typename T>
    void AddMember(const T& t) {
        std::tuple_cat(members_, std::make_tuple(t));
    }
private:
    std::tuple<>members_;
};
class-foo
{
公众:
模板
无效添加成员(常量T&T){
std::tuple_cat(成员,std::make_tuple(t));
}
私人:
std::元组成员;
};

你为什么要这样做?你希望“下面这样”的结果是什么?使用宏时,一个重要的步骤是定义宏应该扩展到什么。@GManNickG有许多对象,其中每个字段实际上只是缓冲区中某个范围的引用。有时需要对所有成员进行验证,将它们放在列表对象中会使验证变得相当容易。其他时候,最好能够通过名字访问成员。@molbdnilo同意。我已经编辑了我的问题。什么是FieldType和Type类?类型是否派生自FieldType?如果是这样的话,您的代码很容易受到切片问题的影响。不幸的是,我们使用的是一个几乎不支持C++98的旧编译器。我梦想能够使用C++11类。真的吗?你为什么没有升级?在我看来,当这样一个编译器升级起来如此简单的时候,你却被它卡住了,这似乎很愚蠢。