动态设置要提取的

时间:2016-11-06 22:41:01

标签: c++ c++11

有结构

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" )

和年龄,如果我使用它像

exctract(p , "age")

在c ++中是否可以这样?

3 个答案:

答案 0 :(得分:4)

您可以使用指向班级成员的指针。

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

你可以这样使用它:

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;
}

demo

答案 1 :(得分:0)

你可以使用预处理程序滥用,更值得注意的是,不使用字符串比较,这看起来就像你想要做的那样。

#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';
}

但不是我建议这样做。

答案 2 :(得分:-1)

你可以使用char[][]这可以做到这一点(但可以说有点owerkill)。 或者只是简单for并检查{{1}}循环中参数的相等性。