如何在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中禁用JavaScript构建错误?

如何在Visual Studio 2017中使用Java

如何在Visual Studio 2017中运行NUnit测试?

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

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

如何在Visual Studio 2017中启用WiX项目

如何在Visual Studio 2017中打开CodeLens?

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

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

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

如何在Visual Studio 2017中更改查找结果格式?

如何在Visual Studio 2017中更改调试端口?

如何在Visual Studio 2017中包含.Net Core 2.0

如何在Visual Studio 2017上安装TypeScript 2.2

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

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

如何在Visual Studio 2017中集成SVN

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

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

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

如何在Visual Studio 2017中重新启用格式

如何在Visual Studio中使用IntelliCode?

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

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

如何在Visual Studio中使用PhoneGap

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

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

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

如何在Visual Studio中使用Startswith

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档