指向具有多个对象的成员函数的指针向量 C++

2024-01-01

考虑以下代码:

class A
{
public:
    void aFoo() {}
};

class B
{
public:
    void bFoo() {}
};

class C
{
public:
    void c1Foo() {}
    void c2Foo() {}
};

无论代码架构如何,是否可以创建指向成员函数的指针向量,即使这些函数位于多个类中?

在这种情况下,继承不是一个解决方案,因为我们不知道要在一个类中使用多少个函数(C类有两个函数)。但我们知道它们都有相同的原型。


不同类的成员函数有不同的类型。因此,为了拥有任何同质容器(例如std::vector or std::array)其中您需要将它们包装在可以代表它们全部的值类型中(例如boost::variant or boost::any).

另一方面,如果您需要的只是特定类型的成员函数(例如void())并且您不介意传递应该事先调用它们的对象,那么您可以将它们存储为std::function<void()>(对于这个具体示例)只需调用std::bind在将它们存放在容器中之前。

举个例子,给出:

A a; B b; C c;
std::vector<std::function<void()>> vector {
    std::bind(&A::aFoo, a),
    std::bind(&B::bFoo, b),
    std::bind(&C::c1Foo, c),
    std::bind(&C::c2Foo, c)
};

您可以致电:

for (auto fn : vector)
    fn();

Live demo http://coliru.stacked-crooked.com/a/8f75b9113dadba64

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

指向具有多个对象的成员函数的指针向量 C++ 的相关文章

随机推荐

  • 使用 numpy 获取每行的唯一计数〜和〜唯一值

    我试图获得与 np unique 等效的值 但带有 axis 1 选项 a np array 8 8 8 5 8 8 2 0 8 8 4 5 4 2 4 4 6 5 2 6 我希望获取每行中计数最高的值并将其保存到一维向量中 基本上是 每行
  • 如何上传带有附加参数的 IFormFile

    我有一个现有的 API 它正在从请求正文中读取数据 HttpPost public async Task
  • 如何限制应用程序可以分配的内存

    我需要一种方法来限制服务可以分配的内存量 以防止服务导致系统饥饿 类似于 SQL Server 允许您设置 最大服务器内存 的方式 我知道 SetProcessWorkingSetSize 并不完全符合我的要求 但我试图让它按照我认为应该的
  • 启动应用程序时 Py2App PIL 图像错误

    我正在使用 py2app 将 python 文件转换为应用程序 但遇到了此错误 Traceback most recent call last File Users MYUSER PycharmProjects webstuff BotTe
  • 从大表达式中提取与模式匹配的表达式

    我有一个包含单个平方根的 Mathematica 表达式 示意性地 expr a b Sqrt c where a b c是大表达式 我想提取 sqrt 下的表达式 例如通过匹配模式 例如 Match expr Sqrt x should
  • 如何在 Liferay 中检索用户个人资料图片

    我想检索用户个人资料图片 我该怎么做 您能分享一下代码片段吗 我使用 Liferay 6 0 6 它只有 user getPortraitId 而没有 user getPortraitURL 那么一旦我在 JAVA 类中获得了肖像 id 我
  • Modaldialog 对 Enter/ESC 没有反应

    I have a modaldialog with an OK and a Cancel button For the OK I set the Default property to True and for the Cancel but
  • 如何在Java中使用keystore来存储私钥?

    我用过KeyPairGenerator生成 RSA 密钥对 如果我没记错的话 KeyStore 仅用于存储证书而不是密钥 如何在电脑上正确存储私钥 注意 此代码仅用于演示目的 将私钥存储在磁盘上时必须对其进行加密 不要按原样使用它 你可以这
  • 时间:2019-05-17 标签:c#MainWindowHandlealwayszero

    我读了一些关于 MainWindowHandle 的线程 但我找不到问题的解决方案 我正在启动一个 gui 应用程序 并希望通过进程对象获取 MainWindowHandle 但如果我不打算 则句柄值始终为零等待 thread sleep
  • 自动或使用快捷方式删除尾随空格

    有没有办法删除 Visual Studio Code 中的尾随空格 自动或使用快捷方式 我一直在命令选项板和编辑器设置中寻找此内容 但找不到我要找的内容 您可以启用空白修剪文件保存时间从设置 打开 Visual Studio Code 用户
  • zone.js 和 Jasmine 时钟之间的冲突

    我正在使用 Jasmine 测试套件 其中包括 普通 Jasmine 测试以及一些 Angular 2 组件的 Jasmine 测试 由于 Angular 2 的包含 zone js 被加载 这与 Jasmine 的时钟产生了冲突 例如 以
  • 为什么不在构造函数中调用可重写的方法?

    这是一个过于简化的示例 但我有一些现实生活中的代码在概念上执行相同的操作 尝试验证派生类的值 设置 访问器方法 并且分析器给我 不要在构造函数中调用可重写的方法 我试图弄清楚是否应该更改代码 或者忽略警告 我想不出有什么理由应该留意这个警告
  • 前向声明 cv::Mat

    您好 我正在尝试转发声明 cv Mat 类 但我无法让它工作 它给出了消息字段 frame 的类型不完整 OpenGlImpl h namespace cv class Mat class OpenGLImpl private cv Mat
  • 删除所有构造函数(或其他函数)的最佳样式?

    假设我想创建一个无法构造的类型 不要问为什么 struct Impossible 我可以这样做 Impossible delete disable automatically generated constructors don t dec
  • 如何获取Vim中所有环境变量的列表?

    当 Vim 启动时 它会从操作系统获取许多环境变量 例如PATH 并且它还设置了自己的环境变量 例如MYVIMRC 我如何list或者查看 Vim 理解的所有环境变量 以及 Vim 内部它们各自的值 在 Vimscript 中 没有直接的方
  • Firebase 身份验证/未经授权的域。域名未授权

    我正在尝试运行这个sample https github com firebase functions samples tree master quickstarts email usersfirebase 项目 但我不断在浏览器控制台中收
  • Jquery.inputmask 不工作

    尝试使用 Robin Herbots Inputmask 模块 但无法使其工作 查看所有其他类似的帖子 一个常见问题是确保 docment ready 函数调用 inputmask 但这对我来说看起来很好 Scripts
  • 将 CDN url 添加到 mvc 4 捆绑器输出

    使用内置的 MVC4 捆绑器 如何将我的 CDN url 添加到它生成的链接标签中 我已经设置了 Amazon Cloudfront 以便它在第一次请求时从我的网络服务器中提取资产 所以当我像这样定义一个包时 bundles Add new
  • 本地运行 jekyll 时出错(rvm gemset 问题)

    我通过 RVM 安装了 ruby 1 9 3 现在想要获取 rekyll gem 以便我可以在本地测试我的博客 当我gem install jekyll它安装正常 但是当我尝试运行时jekyll server我收到错误 Users matt
  • 指向具有多个对象的成员函数的指针向量 C++

    考虑以下代码 class A public void aFoo class B public void bFoo class C public void c1Foo void c2Foo 无论代码架构如何 是否可以创建指向成员函数的指针向量