如何分配给 std::function<bool(wxString&)> 类型的成员
How do I assign to member of type std::function<bool(wxString&)>
我有一个自定义对话框 class(派生自 wxDialog)。我想添加一个 setter,这样您就可以使用类型为 std::function 的某些函数来设置回调函数 MyDialog::m_f。
稍后,对话框将调用此函数。
我希望能够传入一个 lambda 函数(否则我可以用普通的函数指针解决我的问题)。
还必须可以多次调用此 setter,m_f 的最后一个设置值应该有效,从而擦除任何以前的设置值(该值是一个新函数)。
但是,如果我声明成员 m_f,它是否必须在构造函数的初始化列表中初始化?
对于我的用例,这不会真正起作用。我必须能够设置 MyDialog::m_f 在 对话框构建之后(但在调用 ShowModal 之前)。
我的成员 m_f 是否应该是指向 std::function 的(唯一)指针,以便它可以在 MyDialog::MyDialog 中设置为 nullptr?
我的基本问题是我不完全理解std::function。你如何创建一个 std::function<...> 类型的变量并稍后为其赋值(具体函数)?有一个像描述的那样未初始化的变量是什么意思?我如何测试它是否已(未)分配?是否有可能延迟此赋值,即:有一个单独的声明和稍后的初始化,或者 std::function<...> 的变量是否应该立即初始化(如 const 或引用)?
感谢您的帮助。
顺便说一句,语言是C++11,由于工作限制无法升级
How can you make a variable of some std::function<...> type and assign a value (concrete function) to it later?
std::function
有一个导致“空”实例的默认构造函数。在您的情况下,只需声明数据成员 std::function<...> m_f
而不要显式初始化它。
What does it mean to have a variable like described which is uninitialized?
这取决于变量的类型。在std::function
,简直不能用。如果您尝试创建一个空 std::function
,将抛出异常。
How can I test whether it is (un)assigned?
std::function
有一个 explicit
到 bool
的转换运算符。当对象非空时,它的计算结果为 true
,即
if (m_f)
m_f(/* parameters... */);
else
; // do nothing, not set yet
How can you make a variable of some std::function<...> type and assign a value (concrete function) to it later?
如果以后想通过一个setter将lambda表达式赋值给函数对象,可以把这个成员函数变成模板,例如
template<class Fct>
void setCallback(Fct&& f)
{
m_f = std::forward<Fct>(f);
}
另一种选择是将具有所需签名的 std::function
传递给非模板成员函数。
我有一个自定义对话框 class(派生自 wxDialog)。我想添加一个 setter,这样您就可以使用类型为 std::function
我的成员 m_f 是否应该是指向 std::function
我的基本问题是我不完全理解std::function。你如何创建一个 std::function<...> 类型的变量并稍后为其赋值(具体函数)?有一个像描述的那样未初始化的变量是什么意思?我如何测试它是否已(未)分配?是否有可能延迟此赋值,即:有一个单独的声明和稍后的初始化,或者 std::function<...> 的变量是否应该立即初始化(如 const 或引用)?
感谢您的帮助。
顺便说一句,语言是C++11,由于工作限制无法升级
How can you make a variable of some std::function<...> type and assign a value (concrete function) to it later?
std::function
有一个导致“空”实例的默认构造函数。在您的情况下,只需声明数据成员 std::function<...> m_f
而不要显式初始化它。
What does it mean to have a variable like described which is uninitialized?
这取决于变量的类型。在std::function
,简直不能用。如果您尝试创建一个空 std::function
,将抛出异常。
How can I test whether it is (un)assigned?
std::function
有一个 explicit
到 bool
的转换运算符。当对象非空时,它的计算结果为 true
,即
if (m_f)
m_f(/* parameters... */);
else
; // do nothing, not set yet
How can you make a variable of some std::function<...> type and assign a value (concrete function) to it later?
如果以后想通过一个setter将lambda表达式赋值给函数对象,可以把这个成员函数变成模板,例如
template<class Fct>
void setCallback(Fct&& f)
{
m_f = std::forward<Fct>(f);
}
另一种选择是将具有所需签名的 std::function
传递给非模板成员函数。