我要做的是创建一个模板函数,该函数存储通用函数指针和有关如何转换为实际类型的信息。我的脚本绑定 API 使用它从 Python 为游戏引擎进行 C++ 函数调用。在使用带有 LLVM 的 XCode4 将其移植到 OSX 的过程中,我遇到了一个错误。此示例代码在 Visual Studio 2012 中编译并运行良好,但使用 LLVM 时出现错误“No matching function for call to 'Call'”。
#include <iostream>
void testfun (int i)
{
std::cout << "Hello World " << i << std::endl;
}
typedef void BasicFunction ();
template <BasicFunction* fn, typename T0>
void Call (void(*f)(T0), T0 i)
{
reinterpret_cast<decltype(f)>(fn)(i);
}
int main(int argc, const char * argv[])
{
Call<reinterpret_cast<BasicFunction*>(testfun)>(testfun, 5);
return 0;
}
这是非标准代码吗?LLVM 的错误?还是有更好的方法来完成相同的任务?注意:函数指针必须在模板中排在第一位,这样才能自动推导出函数信息。