//my_code.h #include<iostream> #include<string> using namespace std; class a{ public: int val; int val2; }; //refback.h (auto gen) template<typename T> class refback{ public: template<typename Tret> static Tret T::* member(string){ return 0; } }; template<> class refback<a>{ public: template<typename Tret> static Tret a::* member(string name){ if(false){} else if(name=="val"){return &a::val;} //auto gen else if(name=="val2"){return &a::val2;} //auto gen else{return 0;} } }; //main.cpp int main(int argc, char** argv){ a aa; aa.val=42; cout<<aa.*refback<a>::member<int>("val")<<endl; return 0; }