boost ::任何无法生成std :: function的东西

时间:2016-05-05 18:58:58

标签: 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...);
}

boost::any_cast会抛出boost::bad_any_cast,但我不知道为什么,因为类型相同。

我打电话给bar如下

bar(foo, 0, 1);

我错过了什么吗?

1 个答案:

答案 0 :(得分:8)

当您回退boost::any时,您必须回归到完全相同的类型。您无法存储void (*)(int, int)并转换为std::function<void(int, int)>

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