我正在寻找一种通过字符串输入调用不同函数的方法。
我有一个映射,它将每个唯一的字符串与一个函数指针联系起来,还有一个查找函数来搜索映射并在找到时返回一个指针。
现在的技巧是,我需要一种方法来存储和返回指向至少具有不同返回类型的函数的指针,如果可能的话,还具有不同的签名。
用法是:
从网络套接字获取字符串输入 -> 查找并执行找到的函数 -> 将结果直接推回到要序列化和发送的套接字中,而不关心实际发生了什么。
这可行吗?如果没有,我们将如何完成这项任务?
我需要实现一个函数,它在实例化时接受任何(!)函数指针,分析参数类型,存储指针以及何时调用operator(),使用指针执行某些操作.最简单的情况是,用它的参数调用函数.
我尝试将函数指针转换为类似std :: function的东西,我得到错误:
error: invalid use of incomplete type ‘struct std::function<void (*)(...)>’
/usr/include/c++/4.6/functional:1572:11: error: declaration of ‘struct std::function<void(*)(...)>’
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc 4.6.1,使用-std = c ++ 0x进行编译
这是一个最小的例子:
#include <functional>
using namespace std;
typedef void (*F_vararg)(...);
class Foo
{
public:
template<typename... ARGS> Foo(function<F_vararg(ARGS... args)> f);
~Foo(){}
template<typename... ARGS>void operator()(ARGS... args);
private:
F_vararg m_f;
};
template<typename... ARGS>
Foo::Foo(function<F_vararg(ARGS... args)> f)
{
m_f = f;
}
template<typename... ARGS>
void Foo::operator()(ARGS... args)
{
m_f(args...);
}
void func1(double *a1, double *a2, double *b)
{ //do something …Run Code Online (Sandbox Code Playgroud) generics variadic-functions functor variadic-templates c++11