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类。真的吗?你为什么没有升级?在我看来,当这样一个编译器升级起来如此简单的时候,你却被它卡住了,这似乎很愚蠢。