模板传递成员函数,其中args和返回值作为参数c ++

时间:2017-09-06 16:14:40

标签: c++ function templates

我想传递一个模板化的函数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);
    }

1 个答案:

答案 0 :(得分:3)

您需要使用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);
   //                ^^^^^^^^^^^^^
}