我试图将存储在函数指针中的函数指针强制boost::any转换为函数指针.
void foo(int, int) {}
template<typename T, typename... Ts>
void bar(T func, Ts... args)
{
boost::any any = func;
boost::any_cast<std::function<void(Ts...)>>(any)(args...);
}
Run Code Online (Sandbox Code Playgroud)
但boost::any_cast抛出一个boost::bad_any_cast,但我不知道为什么,因为类型是相同的.
我打电话bar如下
bar(foo, 0, 1);
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
当你抛弃一个时boost::any,你必须回归到完全相同的类型.你不能存储void (*)(int, int)和转换为std::function<void(int, int)>.
您可以更改存储的内容或投射的内容以使它们匹配,并且它应该可以正常工作.