有宏添加成员和影响构造函数

时间:2016-04-11 20:32:45

标签: c++ c++98

我想做的事情如下:

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

    MyClass(){
        MAKE_FIELD_LIST();
    }
}

并将其扩展为

class MyClass {
    list<FieldType> allFields;
    Type field1 = Type(args);
    Type field2 = Type(args);
    MyClass(){
        allFields.put(field1);
        allFields.put(field2);
    }
}

MAKE_FIELD_LIST()将使用ADDFIELD将每个字段添加到列表对象allFields中。我过去曾经使用宏来处理更简单的事情,但我无法弄清楚是否有一种方法可以存储并添加到MAKE_FIELD_LIST使用的变量名数组中。

1 个答案:

答案 0 :(得分:0)

您可以做的一件事是使用单个tuple而不是使用单独的成员。您甚至可以将该类与map个字符串相关联,也可以访问正确的元素。

class foo
{
public:
    template <typename T>
    void AddMember(const T& t) {
        std::tuple_cat(members_, std::make_tuple(t));
    }
private:
    std::tuple<>members_;
};