看起来问题6880832指向类成员作为模板的参数的参数可以解决我的问题,但它没有回答如何在模板化类中引用指针。我已经做到了这一点:
template<typename C, typename T, T C::*m, int direction>
class Cmp {
private:
bool isAscend = direction;
public:
bool operator()(const C* lhs, const C* rhs) {
return isAscend ?
rhs->m > lhs->m :
lhs->m > rhs->m;
}// bool operator()(const UnRecTran* lhs,const UnRecTran* rhs)
};// class Cmp
Cmp<UnRecTran, shrtDate, &UnRecTran::date, true>
(我正在尝试在此特定实例中对UnRecTran::date值进行比较)。但是,我得到“'m':不是'UnRecTran'的成员”。
我要做什么甚至有可能吗?我知道成员变量的“地址”是恒定的-它只是从对象开始的偏移量,而不是物理(运行时)地址。
最佳答案
通过指向成员的指针访问成员数据的语法为:
obj.*m_ptr //obj is class type
p_obj->*m_ptr //p_obj is pointer to obj
您的运算符(operator)应该看起来像这样:
bool operator()(const C* lhs, const C* rhs) {
return isAscend ?
rhs->*m > lhs->*m :
lhs->*m > rhs->*m;
}
关于c++ - 指向非静态成员变量的指针作为模板参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32504469/