我正在尝试将存储在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...);
}
但boost::any_cast
会抛出boost::bad_any_cast
,但我不知道为什么,因为类型相同。
我打电话给bar
如下
bar(foo, 0, 1);
我错过了什么吗?
答案 0 :(得分:8)
当您回退boost::any
时,您必须回归到完全相同的类型。您无法存储void (*)(int, int)
并转换为std::function<void(int, int)>
。
您可以更改存储的内容或投射的内容以使它们匹配,并且它应该可以正常工作。