Leo*_*ele 15 c++ templates function-pointers c++11 std-function
我已经定义了一个名为class的模板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;
}
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 11
模板定义的参数可以有四种:
std::nullptr_t (自C++ 11以来)当您std::function在模板定义中提及时,它既不属于上述类别.模板不能接受类型,也不能接受整数值或指向成员的值.
当参数是函数指针类型时,它可以接受函数指针(与类型匹配的函数的地址),这只是一个整数值.请注意,地址始终是一个整数值.所以它属于第二类,这就是它起作用的原因.
| 归档时间: |
|
| 查看次数: |
5206 次 |
| 最近记录: |