如何转发声明一个模板化的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
命名空间添加任何内容。