如何转发声明模板化的std::函数



如何转发声明一个模板化的std函数,以便它可以与各种类型一起使用?

namespace std{
template<typename R, typename T>
class function;
}

,然后else where

std::function<void(int)>

似乎行不通。

编辑:切换到使用boost::function。还是不能编译

根据建议,我在我的头中转发这样的声明:

namespace boost {
template<typename R>
class function;
}

,在header中像这样使用:

boost::function<void(int)> mIdReceiver;

然后在我的源/.cpp文件中包含<boost/function.hpp>并初始化该字段。

得到

mIdReceiver使用未定义的类boost::function<void(int)>

错误。

首先不允许在std名称空间中声明或定义(主)类模板。它将导致程序有未定义的行为。

如果您尝试为已经是标准库的一部分的名称(如std::function)执行此操作,则尤其如此。它将立即与std::function的声明发生冲突。

令人惊讶的是,你正试图做那件事。没有有效的用例。如果您需要std::function,那么您必须使用#include <functional>,并且它将被正确声明,而无需手动向std命名空间添加任何内容。

最新更新