c++ - 传递成员函数时替代 std::bind

标签 c++ c++14

我有一些函数想要进行基准测试。我希望能够将它们传递给基准测试功能。以前我已经像这样将一个函数指针和对对象的引用传递给测试函数

template<typename T>
void (T::*test_fn)(int, int), T& class_obj, )

目前我有这个

#include <iostream>
#include <functional>
using namespace std::placeholders;

class aClass
{
public:
    void test(int a, int b)
    {
        std::cout << "aClass fn : " << a + b << "\n";
    }

};

class bClass
{
public:
    void test(int a, int b)
    {
        std::cout << "bClass fn : " << a * b << "\n";
    }

};

// Here I want to perform some tests on the member function
// passed in
class testing
{   
public:
    template<typename T>
    void test_me(T&& fn, int one, int two)
    {
        fn(one, two);
    }
};


int main()
{
   aClass a;
   bClass b;
   auto fn_test1 = std::bind(&aClass::test, a, _1, _2);
   auto fn_test2 = std::bind(&bClass::test, b, _1, _2);

   testing test;

   test.test_me(fn_test1, 1, 2);
   test.test_me(fn_test2, 1, 2);
}

有没有一种方法可以改用 lambda 来做到这一点? 我知道我可以使用 std::bind 来做到这一点,但我可以使用 lambda 来做到这一点,而不必每次都为我想测试的每个成员函数都这样做吗(如下所示)?

最佳答案

test_me 函数可以采用任何 可调用对象。包括 lambda。无需修改。

有点像

test.test_me([a](int one, int two) { a.test(one, two); }, 1, 2);

关于c++ - 传递成员函数时替代 std::bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54479634/

相关文章:

c++ - 如何调用这种类型的函数

c++ - cocos2d-x 和 box2d 链接错误

c++ - 如何在另一个模板化结构中使用模板化结构 (C++)

c++ - 如何创建一个新变量并同时在 std::tie 中使用它?

c++ - 值容器与智能指针容器的模板重载

c++11 - 浮点除以零不是 constexpr

c++ - 在涉及溢出错误的地方从 int 转换为 char

c++ - 将数组中的所有元素与另一个数组进行比较

c++ - Enum 不是一个 constexpr?

c++ - 我可以使用一个变量模板来声明另一个变量模板吗?