C++ boost::任何can';不能将std::function转换回

C++ boost::任何can';不能将std::function转换回,c++,boost,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...); } 我遗漏了什么吗?当您回退一个bo

我试图将存储在
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
时,您必须回退到完全相同的类型。不能存储
void(*)(int,int)
并强制转换为
std::function


您可以更改存储内容或强制转换到的内容,以使它们匹配,并且应该可以使用。

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


您可以更改存储的内容或强制转换的内容,以便它们匹配,并且应该可以工作。

我不知道为什么,因为类型相同。“它们有什么相同之处?”我不知道为什么,因为类型相同。“它们有什么相同之处?出于某种原因,我认为它们是相同的,但我想他们只是在技术上是一样的。。。Thanks@Rakete1111他们在技术上有很大的不同。它们在你的头脑中可能是相似的,但这并不重要。@Rakete1111你真的这么认为吗?检查是否使用了没有函数指针模拟的
std::function
示例--
struct
操作符()。另一个例子是使用
std::bind
。一个
std::function
表示一些可调用的东西,它可能是函数指针,也可能不是。这很有趣,现在我知道了:)谢谢你,因为某种原因,我认为它们是一样的,但我想它们只是在技术上是一样的。。。Thanks@Rakete1111他们在技术上有很大的不同。它们在你的头脑中可能是相似的,但这并不重要。@Rakete1111你真的这么认为吗?检查是否使用了没有函数指针模拟的
std::function
示例--
struct
操作符()。另一个例子是使用
std::bind
。一个
std::function
表示一些可调用的东西,它可能是函数指针,也可能不是。这很有趣,现在我知道了:)谢谢
bar(foo, 0, 1);