指向具有可变参数列表的函数的函数指针

function pointer to a function which has variable argument list

本文关键字:函数 列表 指针 参数 变参      更新时间:2023-10-16

我们可以有一个函数指针指向一个函数使用可变参数列表?例如,假设我需要根据某个输入T 'input'从许多函数中选择一个函数。我可以使用STL映射这样的东西吗??

template<typename T>
map<T, T (*)(T, ...)> func_map;

如果这是可能的,你能告诉我这样做将是正确的事情,从设计的角度。


[编辑]实际上我有一组算法函数和一个消息字段。我需要根据这个msg上的几个字节值来选择这个算法函数。我正在考虑使用hash_map与一个键值w.r.t.指针的算法函数。我希望在性能方面非常快,有什么方法可以实现这一点。

此外,我没有选择简单的if-else或switch块的原因是因为告诉我们需要执行的函数的值可以在稍后点引用其他函数。

是的,可以这样做,但您可能不应该这样做。可变函数有很多问题,包括:

  • 传递的所有类型必须是POD类型,否则行为未定义
  • 没有类型安全。如果传递错误的类型,将导致未定义的行为。
我建议你找另一种方法。如果你能更详细地说明你为什么需要这样做,也许有人会给你一个更好的选择。

我个人认为变量参数列表是一个坏主意。它可以防止您使用编译器进行类型检查,因此可以更容易地在生成任何目标代码之前找到错误。