2016-10-21 8 views
-1

Я хочу реализовать функцию, которая может распечатать значение одной переменной-члена (например, 'aa') структуры ('Data') по ее имени. Я пытаюсь использовать определение макроса следующим образом, но не удалось. Есть ли простой способ его реализовать?Есть ли простой способ реализовать его на C++?

#include <string> 
#include <iostream> 
using namespace std; 
struct Data 
{ 
    int aa; 
    int bb; 
    int cc; 
    Data(): aa(1),bb(2),cc(3) {}; 
}; 

#define Param(a,b) a.##b 

void Process(Data& data, const string& name) 
{ 
    cout << Param(data, name) << endl; 
} 

void main() 
{ 
    Data data; 

    Process(data, "aa");//I want print the value of Data.aa 
    Process(data, "bb");//I want print the value of Data.bb 
    Process(data, "cc");//I want print the value of Data.cc 
} 
+0

Вы можете объявлять функции внутри структуры, как вы это делаете в классе –

+0

Просто вызовите функцию процесса с параметром 'data.aa' – Prasanna

+0

Фактическая ситуация более сложная, чем эта, не может быть вызвана напрямую. – Logic

ответ

0

Ваш исходный код образец не имеет смысла для меня, потому что, если вы звоните Param(name), то компилятор должен знать, что экземпляр Data он должен использовать, чтобы определить значение переменной члена вы хотите получить значение (но я не эксперт, использующий макросы, и не очень люблю их).

Я пытался решить проблему, используя следующий подход:

struct Data 
{ 
    int aa; 
}; 

#define GetMemberValue(d, n) d.##n 

int main() 
{ 
    Data d; 

    d.aa = 3; 

    int i = GetMemberValue(d, aa); 
} 

По крайней мере, такой подход возвращает правильный результат в этом случае.

Другое дело, что вы заявили, что не можете вызывать переменные-члены напрямую, то есть data.aa, чтобы вы могли столкнуться с той же проблемой, используя макрос. Это просто предположение, поскольку я не знаю оригинальный код, который вы используете.

+0

Да, я нашел его! Я изменил его. – Logic

1

Это невозможно в C++.

Этот вид использования обычно рассматривается на языках сценариев.

В C++ имена переменных строятся во время компиляции.

Смежные вопросы