开发者社区 问答 正文

C++类成员能当做变量类型吗?

弱逼问题:S::*xmeth是个啥? S是个类吧,xmeth是类的一个成员?成员能当做变量类型吗?
贴上相关代码
全选复制放进笔记template 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));
}

展开
收起
a123456678 2016-03-09 15:24:44 2608 分享 版权
1 条回答
写回答
取消 提交回答
  • S::*xmeth是个啥?S是个类吧,xmeth 是类的一个成员?
    根据模板的参数

    template
    可知,S、A1、A2和R都是类。所以,

    S::* // 表示指向类 S 的成员的指针
    S::*xmeth // 表示该指针的变量名是 xmeth
    成员能当做变量类型吗?
    不能,函数reg的第三个参数的类型是成员函数指针,不是成员。

    具体来说,函数reg的第三个参数的变量名是meth,类型是int (S::*)(const A1, const A2, R &)。即meth是一个指向类S的成员函数的指针,这种类S的成员函数有三个参数,这三个参数的类型分别是const A1, const A2和R &,这种类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.

    2019-07-17 18:56:15
    赞同 展开评论
问答分类:
C++
问答地址: