C++ 将类方法作为参数传递给带有模板的类方法

2023-12-10

我正在尝试使用模板将一个类方法传递给另一个类方法,但找不到任何有关如何操作的答案(没有 C++11,boost ok):

我将核心问题简化为:

class Numerical_Integrator : public Generic Integrator{
    template <class T>
    void integrate(void (T::*f)() ){
         // f(); //already without calling  f() i get error
    }
}

class Behavior{
    void toto(){};

    void evolution(){
        Numerical_Integrator my_integrator;
        my_integrator->integrate(this->toto};
}

我得到错误:

error: no matching function for call to ‘Numerical_Integrator::integrate(<unresolved overloaded function type>)’this->toto);
note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘void (Behavior::*)()’

谢谢。

奖励:参数怎么样?

class Numerical_Integrator{
    template <class T, class Args>
    double integrate(void (T::*f)(), double a, Args arg){
         f(a, arg);
    }
}

class Behavior{
    double toto(double a, Foo foo){ return something to do};

    void evolution(){
     Foo foo;
     Numerical_Integrator my_integrator;
     my_integrator->integrate(this->toto, 5, foo};
}

您的问题并不是真正将类方法作为模板参数的一部分传递。

您的问题实际上是关于正确调用类方法。

以下非模板等效项也不起作用:

class SomeClass {

public:

     void method();
};

class Numerical_Integrator : public Generic Integrator{
    void integrate(void (SomeClass::*f)() ){
         f();
    }
}

类方法不是函数,它本身不能作为函数调用。类方法需要调用类实例,类似于:

class Numerical_Integrator : public Generic Integrator{
    void integrate(SomeClass *instance, void (SomeClass::*f)() ){
         (instance->*f)();
    }
}

您需要修改模板和/或类层次结构的设计才能首先解决此问题。一旦正确实现了类方法调用,实现模板就不应该成为问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 将类方法作为参数传递给带有模板的类方法 的相关文章

  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 使用 ggplot 实现多年销售的同步 X 轴

    我有从2012 01 01到现在 2015 11 20 的1417天的销售数据 我不知道如何在同一年的窗口中拥有单年 1月1日 12月31日 轴和每年的销售额 即使使用ggplot scolor as factor Year option
  • 在不使用 SQLAlchemy 的情况下在 Flask 工厂函数中配置 MySQL 数据库

    我是 Flask 新手 正在尝试使用 MySQL 数据库构建一个简单的应用程序 但是 我不想使用 SQLAlchemy 相反 我想使用mysql connector并将 SQL 语句定向到数据库中的 SELECT INSERT UPDATE
  • 使用 CMake 和 Conan 的外部库的未定义引用

    我正在尝试开发一个程序 使用 Conan 和 CMake 以及 LibLogicalAccess 库与 PCSC USB 读卡器进行通信 我按照构建和安装库的说明进行操作 似乎进展顺利 我使用 main cpp 文件创建了一个小型简单的控制
  • 如何在将上传的文件保存到目录之前重命名它?

    下面是我用来将文件上传到目录的代码 效果很好 我的主要问题是 move uploaded file 就是将上传的文件保存到目录中的 也是我猜测的move uploaded file 是为其设置名称的人 如何将文件名更改为随机数 我尝试在下面
  • 问号和冒号(?:三元运算符)在 Objective-C 中意味着什么?

    这行代码是什么意思 label frame inPseudoEditMode kLabelIndentedRect kLabelRect The and 让我困惑 这是C三元运算符 Objective C 是 C 的超集 label fra
  • 八度舍入和评估顺序

    在八度我得到 1 0 05 0 95 0 and 1 0 95 0 05 4 1633e 17 据我所知 这是由求值顺序与近似二进制表示相结合引起的 0 05 为 0 00 0011 和 0 95 为 0 11 1100 有人可以给我整个故
  • mailto 与 Dojo 一起使用时导致 IE8 中出现空白页面

    由于某种原因 在 IE 中 准确地说是 Win 7 中的 IE8 当我单击 mailto 链接时 最终当前页面被地址栏中带有 mailto 的空白页面替换 具体来说 当我单击 mailto 链接时会发生以下情况 新的 about blank
  • icCube - 如何使用 Apache Web 服务器对 icCube 进行身份验证

    我目前正在编写一个 Web 应用程序来访问我们 ICCube 系统的报告 应用程序页面托管在与 IcCube 服务器不同的服务器上 该服务器当前是本地 Apache 服务器 xampp 使用基本身份验证对用户进行身份验证 然后他们才能访问我
  • 如何使用 Qt oauth 创建登录页面?

    我一直在网上寻找如何在 Qt 桌面应用程序打开时创建身份验证页面 我已经构建了该应用程序 它非常小 仅由 main cpp 调用的 MainWindow 组成 现在我想在用户打开应用程序时添加一个身份验证页面 我创建了一个 Google A
  • 回发后将焦点设置在文本框上

    我有一个带有 3 个文本框的搜索页面 用户可以使用它们过滤搜索 我将焦点放在包含文本的文本框上 如果多个文本框包含文本 则只需关注最后一个文本框 private void SetFocusOnTextBox ControlCollectio
  • 无法在 gradle 同步上添加名称为“googleServices”的扩展程序

    我正在使用 ionic 并构建一个应用程序 该应用程序也使用 cordova plugin firebase 进行消息传递和分析插件 当我为 Android 构建这个应用程序时 我去了 android studio 进行测试 但 gradl
  • 将声音(wav)文件从目标c传递到javascript

    我正在 Objective C 中录制声音文件 wav 格式 我想使用 Objective C 将其传递回 JavascriptstringByEvaluatingJavaScriptFromString 我想我必须将 wav 文件转换为
  • 没有括号的字符串连接内的算术运算会导致奇怪的结果

    考虑以下代码行 其输出为 3 这是计算 x y 的预期结果 然而 预期输出是 10 7 3 因此 我的问题是 我与计算连接的字符串发生了什么 我知道为了产生我期望的结果 我需要将算术运算括在括号中 outputs 10 7 3 但由于 PH
  • Ada:在块语句中写入文件

    我正在处理一个数组 其长度在程序执行期间确定 所以我正在利用block我可以在其中设置数组限制的语句 我在将数组的元素写入文件时遇到问题因为我在写入过程中使用了存根 我删除了存根 使所有内容都在同一代码中 虽然现在我的代码编译并运行 它没有
  • 如何在 Xcode 4.2 中编辑项目设置?

    这听起来很愚蠢 但我想编辑我的项目设置并更改项目的 delevelper 配置文件 该项目在 xcode 3 2 中是项目 gt gt 编辑活动目标 编辑项目设置 但在 xcode 4 2 beta 版本上找不到这个 有谁知道怎么办 预先非
  • 使用 flutter 在 Listview 上未显示来自服务器 API 的数据

    我正在从服务器 API 获取数据 数据已成功从服务器获取 但问题是当数据提供给 Listview 时无法显示 如何在 flutter dart 中显示 Listview 上的数据 以下是从服务器 API 获取数据的代码 List
  • 获取我朋友的朋友列表

    我正在构建一个小型 Facebook 应用程序 在我的应用程序中 我试图获取我朋友的朋友列表 当我执行此操作时 我收到来自 Facebook 的错误 提示我无法选择非我的人的信息 我试图检索我朋友的朋友 这是我的意思的一个例子 用户 A 使
  • 是否可以加速背景/文本/边框格式?

    请参阅最后 AHMED AU 的回答 他的解决方案非常棒 在我的旧代码之后 我有了最新版本 速度的差异是惊人的 最初的问题 我正在将一系列 Excel 电子表格转换为深色主题 为此 我编写了一个简单的宏 见下文 用特定的 RGB 颜色替换当
  • Google Protocol Buffers:JavaScript 示例

    在 JavaScript 中使用 Google Protocol Buffers 是一个不错的选择还是使用 JSON 更好 如果有人能给我一个有关 JavaScript 中 Protocol Buffers 实现的简单示例 那就太好了 Go
  • C++ 将类方法作为参数传递给带有模板的类方法

    我正在尝试使用模板将一个类方法传递给另一个类方法 但找不到任何有关如何操作的答案 没有 C 11 boost ok 我将核心问题简化为 class Numerical Integrator public Generic Integrator