你需要编写制定者:
void setField1(const char *f) ;
void setField2(const char *f) ;
的制定者有责任将字符串解码成一个int。
然后,你需要的字段名关联到功能的关联数组(哈希):
"field1" -> setField1
"field2" -> setField2
然后,你需要从关联数组抢函数指针,并与现场的参数调用它。这是一个例子:
#include <iostream>
typedef struct {
int field1;
int field2;
} Example;
Example data;
void setField1(const char *f) {
data.field1 = std::stoi(f);
}
void setField2(const char *f) {
data.field2 = std::stoi(f);
}
void (*tab[])(const char *) = { setField1, setField2 };
int main(void)
{
data.field1 = 10 ;
data.field2 = 20 ;
tab[0]("43") ;
tab[1]("12") ;
std::cout << "fields:" << data.field1 << '|' << data.field2 << std::endl;
return 0;
}
当然,你需要做的不止是做出正确的代码。例如,示例应该是一个类,并且setters移动到那里,然后您需要解码文本行以获取索引或使用关联数组。
没有有没有。运行时不知道你的变量名,所以它不能知道它本身。 –
有没有办法做到这一点,但可能是你可以实现某种责任_模式_chain有一个简单的解决方案,而不是一个长的if-else链。 –
对不起,我不知道什么是责任模式链。你能详细说明一下吗? – aarelovich