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

Maynull

我在Visual Studio 2017中使用C ++ 17。我想使用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_textStart_adding作为参数,并用lambda表达式中使用它。

我怎么能够:

  1. 做一个类方法的指针?
  2. 传送给另一种方法?
  3. 在lambda函数中运行它?

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

阿明·蒙蒂尼(Armin Montigny)

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

#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);
    }
};

如果您需要额外的移植,则可以随时进行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Visual Studio 2017 中使 != 变为 ==

如何在Windows 7上将DirectX 11与Visual Studio 2015工具集v140一起使用

如何在Visual Studio中使用PhoneGap

如何在Visual Studio中使用IntelliCode?

如何在Visual Studio中使用Startswith

如何在没有构建“错误”的情况下将Angular-CLI与Visual Studio 2017一起使用

如何在 Visual Studio 2017 中查找派生类?

如何在Visual Studio 2017中为C ++安装Npgsql

如何在Visual Studio中将项目设置为最近的视图?

如何在Visual Studio 2017中使用Qt库?

如何在Visual Studio 2017中使用Java

如何在Visual Studio 2017中使用Jupyter Notebook?

如何在 Visual Studio 2017 中添加和使用图像?

如何在TFS Visual Studio构建步骤中使用Visual Studio 2017

如何在Visual Studio中使用“参数”运行C程序

如何在 MAC 上将 Appium 连接到 Visual Studio 2019?

如何与Visual Studio 2017一起安装LocalDB 2016?

如何在Visual Studio 2017中获取Spy ++?

如何在Visual Studio 2017中集成SVN

如何在Visual Studio 2017上自动保存工作?

如何在Visual Studio 2017中显示呼叫堆栈窗口

如何在Visual Studio 2017/2019中获取终端窗口?

如何在 Visual Studio 2017 中关闭 Windows 窗体继承?

如何在Visual Studio 2017中禁用JavaScript构建错误?

如何在 Visual Studio 2017 中有效调试?

如何在 Visual Studio 2017 的默认模板中更改路由?

如何在Visual Studio 2017中配置TypeScript和要求

如何在 Visual Studio 2017 中调试或跟踪 Angular 绑定?

如何在Visual Studio 2017中编译更少/无效的文件