我有一些结构或类example
,我需要一个指针发送给它的任何成员的地方。
void send_ptr(void *ptr, std::size_t size);
struct obj {};
struct example {
int a;
obj b;
private:
static void send_ptr(void *ptr, std::size_t size) {}
public:
template <typename M>
void send_member(M *member) {
send_ptr(member, sizeof(M));
}
这工作得很好,但我认为我可以使用指针到成员在这里介绍一点静态检查。 (以上实施send_member
实际上可以发送任意的指针。)
template <typename M>
void send_member(M example::*member) {
send_ptr(&this->*member, sizeof(M));
}
};
这个失败,因为指针到构件解除引用( this->*member
)显然的计算结果为右值。
error: lvalue required as unary ‘&’ operand send_ptr(&this->*member, sizeof(M)); ^
现在,我想我可能是聪明,并试图
&static_cast<M &>(this->*member)
这似乎工作,但说实话,我并不完全了解。 也许这是不安全的。 我知道static_cast
可有时用这种方式(如完美转发),但我不完全了解这里的语义。
那么,是否可以使用指针到成员可靠地获得一个实际的指针成员? 请问static_cast
工作(如果是的话,你能解释一下如何)? 还是有更简单的方法?