相关疑难解决方法(0)

有没有办法在成员名称循环中对N C++类成员应用操作(可能通过预处理器)?

问题:

我有一个带有gajillion(> 100)成员的C++类,它们的行为几乎相同:

  • 相同的类型

  • 在函数中,每个成员具有与其他成员相同的完全代码,例如,从构造函数中的映射赋值,其中map键与成员键相同

  • 在许多函数(> 20)中重复这种行为的相同性,当然每个函数中的行为是不同的,所以没有办法解决问题.

  • 成员列表非常流畅,具有不断添加和有时删除,一些(但不是全部)由更改DB表中的列驱动.

您可以想象,就代码创建和维护而言,这是一个很大的痛苦,因为要添加新成员,您必须为使用类似成员的每个函数添加代码.

我想要的解决方案示例

我需要的实际C++代码(例如,在构造函数中):

MyClass::MyClass(SomeMap & map) { // construct an object from a map 
    intMember1 = map["intMember1"];
    intMember2 = map["intMember2"];
    ... // Up to 
    intMemberN = map["intMemberN"];
}
Run Code Online (Sandbox Code Playgroud)

我希望能够编写的C++代码:

MyClass::MyClass(SomeMap & map) { // construct an object from a map 
#FOR_EACH_WORD Label ("intMember1", "intMember2", ... "intMemberN")
    $Label = map["$Label"];
#END_FOR_EACH_WORD
}
Run Code Online (Sandbox Code Playgroud)

要求

  • 该解决方案必须与GCC兼容(如果重要的话,使用Nmake作为make系统).不关心其他编译器.

  • 解决方案可以是预处理器级别,也可以是可编译的.我对任何一个都很好; 但是到目前为止,我的所有研究都指出了这样的结论:后者在C++中显然是不可能的(我现在想念Perl,因为我被迫做C++!)

  • 解决方案必须至少在某种程度上是"行业标准"(例如Boost很棒,但Joe-Quick-Fingers创建一次并在他的博客上发布的自定义Perl脚本不是.哎呀,我可以很容易地写出Perl脚本,更像是Perl专家而不是C++专家 - 我只是无法让我的BigCompany的软件工程大佬们购买使用它:))

  • 解决方案应该允许我声明一个ID列表(理想情况下,只在一个头文件中而不是在每个"#FOR_EACH_WORD"指令中,就像我在上面的示例中所做的那样)

  • 解决方案不能仅限于"从DB表创建对象"构造函数.有许多功能,其中大多数不是构造函数,需要它.

  • 解决方案"在一个向量中创建所有值,然后在向量上运行'for循环"是一个明显的解决方案,并且无法使用 - 许多应用程序使用的库中的代码,成员是公共的遗憾的是,重写这些应用程序以使用向量成员而不是命名成员是不可能的.

c++ reflection c-preprocessor

7
推荐指数
2
解决办法
431
查看次数

标签 统计

c++ ×1

c-preprocessor ×1

reflection ×1