C ++绑定函数到指针

时间:2017-05-15 11:43:03

标签: c++ variadic-functions

在我的项目中,我想用这个签名绑定一个函数:

template <typename... Args> void* functionA(int a, int b, Args&& ... args){
    ...
}

指针......所以这是我尝试的方式:

    ...
    void** new_address_ptr;
    *new_address_ptr = (void*) &functionA;
    ...

然而,这会产生这样的错误:重载函数的地址,没有上下文类型信息

我需要void** new_address_ptr;才能进一步执行,但我无法弄清楚如何绑定它......

2 个答案:

答案 0 :(得分:2)

functionA不是函数的名称,而是模板的名称。要将其转换为函数的名称(将是模板的实例化),请添加适当的模板参数。例如,如果您想使用functionAint来呼叫std::string &,请执行以下操作:

*new_address_ptr = reinterpret_cast<void*>(&functionA<int, std::string&>);

然而,这有些问题。您需要预先提供模板参数(正确类型),并且由于该函数使用转发引用,因此查找正确的类型可能并不容易:您需要使用左值引用来启用使用左值调用函数

更不用说存储指向void *中的函数的指针甚至不能保证工作,这取决于你的编译器是否支持它。

我使用reinterpret_cast因为在C ++中最好避免使用C风格的强制转换,因为它需要详细检查所涉及的类型以实现它们的确切功能。

答案 1 :(得分:1)

你不能这样做,因为没有functionA这样的功能存在。 您必须实例化模板,然后才能获取该函数的地址。