动态设置要提取的参数

Dynamicly setting which parameter to extract

本文关键字:参数 提取 设置 动态      更新时间:2023-10-16

有结构

struct Person{
   Person(int a , int i):age(a),id(i){};
   int age;
   int id;
}

是可能的传递哪个参数提取作为参数在函数?就像

int extract( Person * p , param ){
    return p -> param;
} 

如果像

那样使用,它将返回id
extract( p , "id" )

和age如果我像

那样使用
exctract(p , "age")

在c++中可能有这样的东西吗?

可以使用指针指向类成员。

struct Person{
    Person(int a , int i):age(a),id(i){};
    int age;
    int id;
};
int extract(Person* p, int Person::* param)
{
    return p->*param;
}

,你可以这样使用:

extract(p, &Person::id);
演示

您可以通过滥用预处理器来做到这一点,更值得注意的是,不使用字符串比较,这似乎是您想要做的。

#include <iostream>
#define extract(p, i) (p->i)
struct Person{
  int age;
  int id;
};
int main() {
  Person p;
  p.age = 100;
  p.id = 30;
  std::cout << extract((&p), id) << 'n' << extract((&p), age) << 'n';
}

我并不建议这样做。

您可以使用Map<char*, int>,它完全可以做到这一点(但有争议的是有点过度)。或者只是简单的char[][],并在for循环中检查参数是否相等。