boost :: any无法返回std :: function

Rak*_*111 1 c++ boost

我试图将存储在函数指针中的函数指针强制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)

我错过了什么吗?

Dav*_*rtz 8

当你抛弃一个时boost::any,你必须回归到完全相同的类型.你不能存储void (*)(int, int)和转换为std::function<void(int, int)>.

您可以更改存储的内容或投射的内容以使它们匹配,并且它应该可以正常工作.

  • @Rakete1111他们在技术上非常不同.它们可能在你的头脑中相似,但这不算数. (3认同)