c++ - 带有参数的模板传递成员函数和返回值作为参数c++

标签 c++ function templates

我想为类传递一个模板化函数参数和该类的一个方法来调用。该方法有参数和返回值。

这是我目前所拥有的。我相信我对模板化函数语法有点迷惑:

栏.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);
   //                ^^^^^^^^^^^^^
}

关于c++ - 带有参数的模板传递成员函数和返回值作为参数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079982/

相关文章:

c++ - 为什么我不能使用 protected 嵌套类作为另一个嵌套 protected 类的模板参数?

c++ - 使用其他类型的函数声明违反 C++ 中的类型安全?

c++ - 减少 Visual Studio 程序大小

JavaScript Onclick 函数

c - 如何让这个C程序在不修改代码的情况下调用这个函数?

c - 它是否禁止从 Objective-C++ 类方法体调用经典 C 函数?

php - 解码 C++ 编码的 ASCII 扩展值?

c++ - boost/asio async_read() TCP 服务器 - 了解 io_service.run() 在 linux 上

c++ - 了解 C++ 模板示例

c# - 如何在 MVC 4 中为枚举创建默认编辑器模板?