std::function 作为委托构造函数中的参数
std::function as a parameter in delegate constructor
我想知道如果我将 abc(AB)
传入 main()
控件进行初始化,为什么控件 不会 转到 AB()
当 abc(10)
通过
时 i 为 10
class abc
{
int i;
std::function<void(void)>func = nullptr;
public:
abc(){}
abc(std::function<void(void)>&fb):func(fb){}
abc(int i):i(i){}
};
void AB()
{
cout<< "fun_AB";
}
int main()
{
abc(AB);
abc(10);
}
你的构造函数是用 AB
调用的,它是一个函数:
abc(std::function<void(void)>&fb) : func(fb) {}
这会将 func
初始化为指向 AB
,但仅此而已。也许您想称呼它:
abc(std::function<void(void)>&fb) : func(fb) { func(); }
abc(AB);
这是一个名为 AB
的 abc
类型变量的声明,相当于 abc AB;
。所以调用了无参数构造函数。如果不想命名变量,可以使用此语法:
abc{AB};
这个 "works" 因为它不能被解析为声明,而你的版本可以。
但这还不够,您需要更改构造函数以接受 const&
:
abc(std::function<void(void)> const& fb) : func(fb)
{
func(); // if you want AB to be called
}
(非常量引用不会绑定到临时对象。)
我想知道如果我将 abc(AB)
传入 main()
控件进行初始化,为什么控件 不会 转到 AB()
当 abc(10)
通过
class abc
{
int i;
std::function<void(void)>func = nullptr;
public:
abc(){}
abc(std::function<void(void)>&fb):func(fb){}
abc(int i):i(i){}
};
void AB()
{
cout<< "fun_AB";
}
int main()
{
abc(AB);
abc(10);
}
你的构造函数是用 AB
调用的,它是一个函数:
abc(std::function<void(void)>&fb) : func(fb) {}
这会将 func
初始化为指向 AB
,但仅此而已。也许您想称呼它:
abc(std::function<void(void)>&fb) : func(fb) { func(); }
abc(AB);
这是一个名为 AB
的 abc
类型变量的声明,相当于 abc AB;
。所以调用了无参数构造函数。如果不想命名变量,可以使用此语法:
abc{AB};
这个 "works" 因为它不能被解析为声明,而你的版本可以。
但这还不够,您需要更改构造函数以接受 const&
:
abc(std::function<void(void)> const& fb) : func(fb)
{
func(); // if you want AB to be called
}
(非常量引用不会绑定到临时对象。)