我已经定义了名为的类模板CallBackAtInit
其唯一目的是在初始化时调用函数(构造函数)。该函数在模板参数中指定。问题是模板不接受std::function
作为参数;但它们接受函数指针。为什么?
这是我的代码:
#include <iostream>
#include <functional>
/* Does not work:*/ template <typename return_type, typename arg_type, std::function<return_type(arg_type)> call_back>
/* Work fine: */// template <typename return_type, typename arg_type, return_type(*call_back)(arg_type)>
class CallBackAtInit {
public:
CallBackAtInit(arg_type arg)
{
call_back(arg);
};
};
void printInt(int i);
class HoldInt : private CallBackAtInit<void, int, printInt> {
public:
HoldInt(int integer)
: CallBackAtInit(integer)
{}
// ...
};
int main(int argc, char** argv)
{
HoldInt hi(10);
return 0;
}
void printInt(int i)
{
std::cout << i << std::endl;
}
The 范围模板定义可以有四种:
- 只能接受的参数type (or template type).
- 只能接受的参数积分值.
- 只能接受的参数指向成员值的指针.
-
std::nullptr_t
(自 C++11 起)
当你提到std::function
在模板定义中,则它不属于上述类别。模板无法接受types,也不能接受积分值, or 指向成员值的指针.
当参数为函数指针类型,那么它可以接受函数指针(与类型匹配的函数的地址),它只是一个整数值。请注意,地址始终是整数值。所以它属于第二类,这就是它起作用的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)