2016-11-06 79 views
2

其參數具有結構動態地設置提取

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

是否可以傳遞給exctract作爲函數的參數哪個參數?像

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

的東西,如果我用它像

exctract(p , "age") 

這將返回ID,如果使用它像

extract(p , "id") 

和年齡是這樣的可能在C++?

+4

看起來像的複製品[我怎麼能說只給它的名稱的方法(http://stackoverflow.com/questions/19473313/how-to-call-a-function-by-its-name-stdstring -in-c)的 – Nikita

回答

-1

您可以使用Map<char*, int>能做到這些(但可以說是有點owerkill的)。 或只是普通的char[][]並檢查與for循環中的參數是否相等。

4

您可以使用指向類成員的指針。

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

demo

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

不是,我建議這樣做,但。