C++类成员能当做变量类型吗?
PHP中文网
PHP中文网 2017-04-17 13:22:27
0
3
616
  1. 弱逼问题:S::*xmeth是个啥? S是个类吧,xmeth是类的一个成员?成员能当做变量类型吗?

  2. 贴上相关代码

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));
}
  1. 贴上报错信息

  2. 贴上相关截图

  3. 已经尝试过哪些方法仍然没解决(附上相关链接)

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(3)
Peter_Zhu

S::*xmeth是個啥? S是個類別吧,xmeth 是類別的一個成員?

依照模板的參數

template<class S, class A1, class A2, class R>

可知,SA1A2R都是類別。所以,

S::*       // 表示指向类 S 的成员的指针
S::*xmeth  // 表示该指针的变量名是 xmeth

成員能當變數類型嗎?

不能,函數reg的第三個參數的型別是成員函式指標,不是成員。

具體來說,函數reg的第三個參數的變數名稱是meth,型別是int (S::*)(const A1, const A2, R &)。即meth是一個指向類別S的成員函數的指針,這種類別S的成員函數有三個參數,這三個參數的類型分別是const A1, const A2R &,這種類S的成員函數的回傳值類型是int

用英文可能比較容易理解:meth is a pointer points to member function of class S whose parameters are const A1, const A2 and R &, return type is int,

and

, return type is ..

如果不太懂的話,可以先學習一下 函數指標的閱讀方法,同時也可以使用 cdecl 這個網站。
巴扎黑

雷雷

大家讲道理

這是成員函數指針,一般來講長度在4byte-16byte不等,內部根據不同的ABI約定,描述了成員函數在給定類指針的情況下的調用尋址方式,我看你類裡面還有一個S*成員,這個類別應該是類別成員函數的一個包裝吧

你那個程式碼裡的呼叫方式是這樣(sob->*meth)(參數)

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板