15,440
社区成员
发帖
与我相关
我的任务
分享
class foobar
{
public:
foobar();
foobar(int a):_a(a){};
int get<>value();
int _a;
}
int foobar::get<>value()
{
return _a;
}
foobar f(1);
//下面三种调用方法均可
//传统方法仍然适用
f.getvalue();
//传统方法适用于新语法
f.get<>value();
//新的调用成员函数的方法,语义更清晰些
get<f>value();
struct value{};
int get(value v, const foobar& f) {
return f._a;
}
get(value(), f);
template<class T>
void do_something( const T& f) {
int res = get(value(), f);
std::cout << res << std::endl;
}
template<class Tag, class T>
int get(const T& f);
template<>
int get<value, foobar>(const foobar& f) {
return f._a;
}
...
get<value>(f)
...
int my_class::* val_offset= &my_class::value;
my_class obj;
//.....
obj.(*val_offset) = 10;
//你那个get(v,f)可以写成这样
#define get(v,f) (f.*v)