C++ 指向具有变量参数列表的函数的函数指针
我们能有一个函数指针指向一个使用可变参数列表的函数吗? 例如,假设我需要根据某个输入T“input”在多个函数中选择一个函数。我可以用STL地图吗C++ 指向具有变量参数列表的函数的函数指针,c++,pointers,stl,function-pointers,C++,Pointers,Stl,Function Pointers,我们能有一个函数指针指向一个使用可变参数列表的函数吗? 例如,假设我需要根据某个输入T“input”在多个函数中选择一个函数。我可以用STL地图吗 template<typename T> map<T, T (*)(T, ...)> func_map; 模板 映射函数映射; 若这是可能的,你们能告诉我这样做将是正确的事情做设计的角度 [编辑] 实际上,我有一组算法函数和一个消息字段。我需要根据此消息上的几个字节值选择此算法函数。我在考虑使用hash_-map和一个键
template<typename T>
map<T, T (*)(T, ...)> func_map;
模板
映射函数映射;
若这是可能的,你们能告诉我这样做将是正确的事情做设计的角度
[编辑] 实际上,我有一组算法函数和一个消息字段。我需要根据此消息上的几个字节值选择此算法函数。我在考虑使用hash_-map和一个键值w.r.t,即指向该算法函数的指针。我想以非常快的速度实现性能,可以采用什么样的方法来实现这一点
另外,我之所以不选择simple if else或switch block,是因为告诉我们需要执行的函数的值可以在稍后引用其他函数。是的,可以这样做,但您可能不应该这样做。可变函数存在许多问题,包括:
- 传递的所有类型必须是POD类型,否则行为未定义
- 没有任何类型的安全性。如果传递了错误的类型,将导致未定义的行为
我建议你找到另一种方法。如果你能详细说明为什么需要这样做,也许有人能给你一个更好的选择。我个人认为可变参数列表是个坏主意。它防止您使用编译器进行类型检查,因此在生成任何目标代码之前更容易找到bug
因此,我建议你想办法解决这个问题。我突然想到了这个问题。好奇和wi-fi,所以这个问题。Sry还没有试过:(注意,没有模板typedef,所以你写的东西实际上并不存在,但原则上答案是“是”@Marcelo-谢谢Marcelo。我不知道有一个网站可以如此轻松地运行代码。这将是我最常使用的书签。人们一直告诉我,我应该写这样的东西
std::cout C++0x可能会通过用户定义的文字产生一个非常好的解决方案。类似“(%g,%g):%s\n”F
(注意F
后缀)可以解析为一个函子,该函子包含四个类型为double、double、double和const char*的参数。当然,这无助于定义OP的func\u映射。
。事实上,我很难想出一个可行的替代方法。@marcelocontos:你知道吗?@Daniel:知道,这是对的明显改进