弱逼问题:S::*xmeth是个啥? S是个类吧,xmeth是类的一个成员?成员能当做变量类型吗?
贴上相关代码
template<class S, class A1, class A2, class R> void
rpcs::reg(unsigned int proc, S*sob, int (S::*meth)(const A1 a1, const A2 a2,
R & r))
{
class h1 : public handler {
private:
S * sob;
int (S::*meth)(const A1 a1, const A2 a2, R & r);
public:
h1(S *xsob, int (S::*xmeth)(const A1 a1, const A2 a2, R & r))
: sob(xsob), meth(xmeth) { }
int fn(unmarshall &args, marshall &ret) {
A1 a1;
A2 a2;
R r;
args >> a1;
args >> a2;
if(!args.okdone())
return rpc_const::unmarshal_args_failure;
int b = (sob->*meth)(a1, a2, r);
ret << r;
return b;
}
};
reg1(proc, new h1(sob, meth));
}
贴上报错信息
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
依照模板的參數
可知,
S
、A1
、A2
和R
都是類別。所以,不能,函數
reg
的第三個參數的型別是成員函式指標,不是成員。具體來說,函數
reg
的第三個參數的變數名稱是meth
,型別是int (S::*)(const A1, const A2, R &)
。即meth
是一個指向類別S
的成員函數的指針,這種類別S
的成員函數有三個參數,這三個參數的類型分別是const A1
,const A2
和R &
,這種類S
的成員函數的回傳值類型是int
。用英文可能比較容易理解:
andmeth
is a pointer points to member function of classS
whose parameters areconst A1
,const A2
andR &
, return type isint
,, return type is ..
如果不太懂的話,可以先學習一下 函數指標的閱讀方法,同時也可以使用 cdecl 這個網站。雷雷
這是成員函數指針,一般來講長度在4byte-16byte不等,內部根據不同的ABI約定,描述了成員函數在給定類指針的情況下的調用尋址方式,我看你類裡面還有一個S*成員,這個類別應該是類別成員函數的一個包裝吧
你那個程式碼裡的呼叫方式是這樣(sob->*meth)(參數)