我删除我的旧问题,然后在此处重新提出问题。我可以使用模板来实现以下功能吗?

#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/

10-13 08:49