有结构和功能:
struct S {
T1 t1;
T2 t2;
// и т.д.
} s;
template <class T> f(const T& t, const char* name) { /* что-то */ }
以下(伪)代码需要工作:
for (поле : поля(s))
f(поле.значение, поле.имя);
也就是说,您需要以某种方式枚举结构的所有字段,将它们的类型、值和名称作为字符串获取。
我知道C++中没有反射。但是这里在执行时不需要反射,在编译或链接阶段需要反射。因此,可以通过结构声明以任何方式变态S,但不可能触及功能f。但最后,必须以某种方式创建一个结构或类似结构的东西,它允许您访问字段(s.t1等) 。
您不能使用第三方库,但可以使用宏、模板和通常所有可用的C++14功能。
正如@KoVadim 在对该问题的评论中所建议的,可以使用所谓的X宏。使用它们,您的任务大致解决如下:
程序结果:
您可以添加我的解决方案。它旨在解析命令行选项并将它们放入一个元组中,该元组的元素可以通过名称访问。在这种情况下,编译阶段的名称将替换为元组中元素的索引。
如何使用它:
您需要从 opt-parser 继承该类
之后,您可以通过名称引用其字段:
这是答案的外观以及获得它的步骤。
我们仍然需要在各处添加链接并添加对字段名称的支持。