如何在 Visual Studio 2017 上将 class 方法设置为参数并将它们与 lambda 一起使用?

How to set class methods as parameters and use them with lambdas on Visual Studio 2017?

我在 Visual Studio 2017 年使用 C++17。我想在另一个 class 方法中执行一个 class 方法,使用 lambda 表达式。到目前为止我是这样做的:

void CMFCApplicationDlg::Add_text() {

    std::ofstream outfile;
    outfile.open("test.txt", std::ios_base::app);
    outfile << "text added" << std::endl;
}


void CMFCApplicationDlg::Start_adding() {

    sched.cron("0 12 * * *", [this]() { CMFCApplicationDlg::Add_text(); });
}

我认为如果可以将 Add_text 的指针作为参数发送到 Start_adding 并与 lambda 表达式一起使用会更好。

我怎样才能:

  1. 制作class方法的指针?
  2. 发送到另一个方法?
  3. 运行 它在 lambda 函数中?

如果我能得到一些示例代码,我将不胜感激。

下面的代码应该可以回答您的所有问题:

#include <iostream>

class Test {
public:
    // 2 test functions
    void print1(int i) { std::cout << "From function print1: " << i << "\n"; }
    void print2(int i) { std::cout << "From function print2: " << i << "\n"; }
    void print3(int i) { std::cout << "From function print3: " << i << "\n"; }

    // Function taking function pointer
    void test1(void (Test::* functionPointer)(int), int para) {

        std::cout << "\nFrom function test1:\n";
        (*this.*functionPointer)(para);
        std::cout << "\n";
    }

    void test2()
    {
        std::cout << "\ntest2. Call via other function\n";
        // Calling with function pointer via other function
        test1(&Test::print1, 17);

        std::cout << "\ntest2. Call via function pointer\n";
        // Define function pointer 
        void (Test::* fptr)(int) = &Test::print2;
        // Call function pointer
        (this->*fptr)(3);


        std::cout << "\ntest2. Call via lambda\n";
        // Lambda
        auto lambda = [&fptr,this](const int i) { (this->*fptr)(i); };
        // Call lambda
        lambda(42);
    }
};

如果您需要额外的解释,随时都可以。