提升::任何不能投射回 标准::函数
boost::any can't be casted back std::function
我正在尝试将存储在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)>
。
您可以更改存储的内容或投射到的内容,以使它们匹配,这应该会起作用。
相关文章:
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 如何使用模板化标准::函数作为参数?
- 是否有任何 C 标准函数将值"1"传递给所有 (%s)
- 可变参数模板和标准::函数
- 是否有一个标准函数可以打印/监视stdin文件的内容,同时将数据留在stdin中
- 我怎样才能把这个标准::函数传递给标准::异步
- 如何使用标准::函数使用可变参数模板
- "AfxIsValidAddress"函数的等效标准函数是什么?
- 使用多个参数将成员功能指针转换为标准C函数
- C++:将标准::函数转换为gsl_function
- 标准::函数的 typename 关键字
- 将成员函数作为标准函数回调
- C++在全局命名空间中找不到非标准 C 函数
- 标准函数的函数指针和成员函数指针的规则是什么
- 如何使用数组创建标准::函数
- 如何在 Visual Studio 中测试时重写标准C++函数
- 在C++中使用标准 C 函数时,是否需要"std::"前缀?
- 链接器如何查找标准函数和WinAPI函数
- 标准::函数复制参数
- 互斥与标准函数调用