繁体   English   中英

带有args且参数值为c ++的返回值的模板传递成员函数

[英]Template pass member function with args and return value as parameter c++

我想为类传递一个模板化函数args并调用该类的方法。 该方法具有参数以及返回值。

这是我到目前为止所拥有的。 我相信我对模板化函数语法有所了解:

bar.h

    class Bar {
     public:
       Bar();
       int FuncBar(int arg1);
    }

foo.h中

    template<typename A, int (A::*Method)()>
    int FuncTemplate(A* a, int bar_arg1) {
      ....
      return a->Method(bar_arg1)
    }


    class Foo { 
     public:
       explicit Foo(Bar* bar);

     private:
       void FuncFoo();
       Bar* bar_;
    }

foo.cc

    Foo::Foo(Bar bar) : bar_(bar) {};
    void Foo::FuncFoo() {
      ...
      int bar_arg1 = 0;
      FuncTemplate<Bar, &(*bar_)::FuncBar>(bar_, bar_arg1);
    }

您需要使用int (A::*Method)(int)作为函数指针类型,因为成员函数期望将int作为参数。

同样,对成员函数的调用必须是(a->*Method)(bar_arg1) 使用成员函数调用成员函数的语法不是很直观。

template<typename A, int (A::*Method)(int)>
int FuncTemplate(A* a, int bar_arg1) {
  ....
  return (a->*Method)(bar_arg1)
}

另外,您需要使用&Bar::FuncBar获取指向成员函数的指针,而不是&(*bar_)::FuncBar

void Foo::FuncFoo() {
   int bar_arg1 = 0;
   FuncTemplate<Bar, &Bar::FuncBar>(bar_, bar_arg1);
   //                ^^^^^^^^^^^^^
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM