提升::任何不能投射回 标准::函数

boost::any can't be casted back std::function

本文关键字:标准 函数 任何 不能 提升      更新时间:2023-10-16

我正在尝试将存储在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);

我是不是错过了什么?

当强制转换回boost::any时,必须强制转换回完全相同的类型。不能存储void (*)(int, int)并转换为std::function<void(int, int)>

您可以更改存储的内容或投射到的内容,以使它们匹配,这应该会起作用。