我删除我的旧问题,然后在此处重新提出问题。我可以使用模板来实现以下功能吗?
#include <iostream>
using namespace std;
#define FUNC(T1, T2) do {cout<< T1.T2<<endl; } while(0);
struct ST{
double t1;
int t2;
double t3;
};
struct ST2{
int t1;
double h2;
};
int main()
{
ST st;
ST2 st2;
st.t1 = 1.1;
st.t2 = 0;
st.t3 = 3.3;
FUNC(st, t1);
FUNC(st, t2);
FUNC(st, t3);
FUNC(st2, h2);
}
最佳答案
我认为您无法使用该确切语法做任何事情。但是您可以通过成员指针和函数模板获得一些好处:
template <typename T, typename Q>
void print(T& var, Q T::* mem)
{
cout << var.*mem << endl;
}
使用:
print(st, &ST::t1);
print(st, &ST::t2);
print(st2, &ST2::h2);
请注意,st2.h2在您的示例中未初始化,因此您的代码表现出未定义的行为。
关于c++ - 如何在不使用MACRO的情况下访问成员变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17268464/