如何指定指向重载函数的指针?

2024-03-23

我想将重载函数传递给std::for_each()算法。例如,

class A {
    void f(char c);
    void f(int i);

    void scan(const std::string& s) {
        std::for_each(s.begin(), s.end(), f);
    }
};

我希望编译器能够解决f()通过迭代器类型。显然,它(GCC 4.1.2)没有这样做。那么,我如何指定哪个f() I want?


您可以使用static_cast<>()指定哪个f根据函数指针类型隐含的函数签名来使用:

// Uses the void f(char c); overload
std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));
// Uses the void f(int i); overload
std::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(&f)); 

或者,您也可以这样做:

// The compiler will figure out which f to use according to
// the function pointer declaration.
void (*fpc)(char) = &f;
std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overload
void (*fpi)(int) = &f;
std::for_each(s.begin(), s.end(), fpi); // Uses the void f(int i); overload

If f是一个成员函数,那么你需要使用mem_fun http://www.cplusplus.com/reference/std/functional/mem_fun/,或者根据您的情况,使用Dobb 博士的文章中提出的解决方案 http://www.drdobbs.com/184401746.

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

如何指定指向重载函数的指针? 的相关文章

  • 哪个运算符更快:!= 或 >

    哪个运算符更快 gt or 示例 我想针对 1 测试一个值 可以为正值或 1 if time gt 1 or if time 1 时间的类型为 int 标准没说 因此 这取决于给定编译器在给定版本中生成哪些操作码 以及给定 CPU 执行它们
  • 用于列表和映射的 C++ 容器

    我们有一个键和值对的集合 我们需要一个容器 它可以帮助我们检索值 o 1 但也可以记住插入顺序 以便当我们进行迭代时 我们可以像插入顺序一样进行迭代 由于键是一个字符串 我们将无法使用集合或类似的结构 目前我们已经定义了自己的集合类 其中包
  • 如何在代码中设置控件模板?

    我在 XAML 中有这个
  • 以编程方式最大化屏幕一半的窗口

    我想最大化屏幕左侧的随机窗口 我可以在我的代码中使用 Windows Aero 函数吗 这个窗口can像用鼠标一样最大化 我只想以编程方式做到这一点 I use C 我可以得到IntPtr窗户的 如果可能的话 不要伪造鼠标或键盘输入 这可以
  • Attachconsole的问题

    我需要使 Windows GUI 应用程序可以在控制台中运行 因此当使用命令行调用应用程序时 我将控制台附加到进程 但是 应用程序退出后 除非按 ENTER 键 否则不会显示带有路径的控制台提示符 有什么办法可以不按回车键直接显示路径提示吗
  • 如何在命名管道 (mkfifo) 上执行非阻塞 fopen?

    如果我有一个程序使用 mkfifo 创建并尝试打开命名管道 如何在不阻塞的情况下打开管道进行读取或写入 具体来说 我正在编写一个 C 程序 它可以在有或没有 GUI 的情况下运行 用 Java 编写 在 C 程序中 我使用 mkfifo 成
  • jni.h:没有这样的文件或目录

    我一直在关注本教程 http www java tips org other api tips jni simple example of using the java native interface html 在第 5 步 我从 GCC
  • 用于更改可为空和非空数据类型的数据注释是什么?

    我认为这对于有经验的程序员来说应该很简单 但事实就是如此 我正在开发一个首先使用实体 框架代码的项目 我还启用了迁移并设置为自动 可爱的功能 我愚蠢地在我的实体类中声明了一种错误的数据类型 现在我意识到它不适用于我想要做的事情 一定是自动完
  • 抑制第 3 方库控制台输出?

    我需要调用一个第三方库 该库恰好会向控制台输出一堆内容 代码就像这样 int MyMethod int a int b ThirdPartyLibrary Transform a spews unwanted console output
  • std::ostream 需要功能帮助

    我需要有人逐步向我解释这些代码行 并且我需要一些帮助来使用 ostream 和简单的示例 谢谢 inline std ostream operator lt lt std ostream os const Telegram t os lt
  • 如何在 Visual C++ 中创建 ActiveX DLL

    是否有在 Visual Studio 2008 C 中创建 ActiveX DLL 的教程 参考 我有一个使用 DLLRegisterServer UnregisterServer 构建的 DLL 并且已注册 但我在弄清楚使用什么名称来引用
  • EF Core:同时使用ID作为主键和外键

    我有两个实体 Prospect and Person 我想做的是使用Prospect ID作为主键Prospect表并作为外键PersonID 我的想法是对两个实体使用相同的 ID 而不需要PersonID on my Prospect实体
  • 未初始化的枚举变量值

    我使用 enum 声明新类型 DAY 然后从中声明两个变量 day1 和 day2 然后当我使用未初始化的值时 我应该看到 0 到 6 之间的值 因为 enumlist 中的值介于 0 到 6 之间 但我收到了这些值改为 858993460
  • 将文本文件与 C# 中的文本模式进行比较?

    我将文本文件与类似的模式进行了比较 它正在将整行写入日志 如下所示 insert into depdb fin quick code met 但我需要单独写这个depdb或者depdb fin quick code met 即 我只需要这个
  • Excel 中的单元格“数字存储为文本”

    我有一个 C 程序 它获取旧报告的文本文件并映射到 Excel 工作表 但对于交易单元格 它输出为 数字存储为文本 这不允许 任何格式 我们想要显示 1 000 00 但它仅显示为 1000 有什么办法可以得到这种格式吗 这些列是余额和金额
  • 静态、非成员或静态非成员函数?

    每当我有一些 实用 方向的功能时 我最终都会想知道哪个选项是最好的 例如 在我正在工作的上下文中打印消息结构 自己的或外部的 一些编码 解码代码或一些有用的转换函数 我想到的选项是 1 辅助类 结构中的静态函数 struct helper
  • 有条件地使用按位运算符

    条件运算符如何使用按位运算符表示 这是一个家庭作业问题 我必须仅使用按位运算来实现条件运算符 那就很简单了 如果if允许使用语句 但它必须是严格的按位运算符 仅运营商 gt gt and lt lt 可以使用 不if可以使用语句或循环 该函
  • __get_cpuid 的可移植性如何?

    我在用着 get cpuid 获取有关的信息x86 and x86 64我的程序运行的处理器 在 Linux 和 Mac OS 上使用 GCC 似乎可以在不包含任何头文件的情况下编译和运行 但是它的可移植性如何 它可以与其他编译器一起使用吗
  • 无法使用 openxml 在 PPT 报告中生成第二个表

    我有这个代码 我能够完美地生成带有文本数据的 pptx 报告 我在这份报告中还有 4 个表格 其中包含动态数据 我可以在 PPT 中生成一张表格 但无法生成多个表格 Requirement On the right I have 4 tab
  • REQ/REP 模式中的 ZeroMQ FiniteStateMachineException

    我有两个简单的组件 它们应该使用 REQ REP ZeroMQ 模式相互通信 服务器 REP Socket 是使用 pyzmq 在 Python 中实现的 import zmq def launch server print Launchi

随机推荐