void func(const std::function<void()>& f = empty)
{
if(f)
f();
}
什么是空的&#39;应该?我使用[](){}
。但从技术上讲,这不是空的,f()将执行。
答案 0 :(得分:51)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Mysqlconn = New MySqlConnection
Mysqlconn.ConnectionString =
"server=localhost;userid=root;password=baby;database=database"
Dim Reader As MySqlDataReader
Try
Mysqlconn.Open()
Dim Query As String
Query = "select * from database.testclass where Room='" & cbrm.Text & "' and Day='" & cbday.Text & "' and Start='" & cbstart.Text & "' and End='" & cbend.Text & "'"
Command = New MySqlCommand(Query, Mysqlconn)
Reader = Command.ExecuteReader
While Reader.Read
If cbrm.Text = Reader.GetString("Room") And cbday.Text = Reader.GetString("Day") And cbstart.Text >= Reader.GetString("Start") And cbend.Text < Reader.GetString("End") Then
MessageBox.Show("There is/are conflict/s")
Else
MessageBox.Show("There is/are no conflict/s")
End If
End While
Mysqlconn.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
Mysqlconn.Dispose()
End Try
End Sub
答案 1 :(得分:19)
const std::function<void()>& f = nullptr
或
const std::function<void()>& f = std::function<void()>()
答案 2 :(得分:10)
我会在空案例中使用nullptr。可以使用它,因为你从不使用完整的函数对象而只是指向它们的指针,所以func(f1);
实际上是func(&f1)
=&gt;你总是将指针传递给func,所以nullptr
是恕我直言的最佳人选。
编译并运行:
void func(const std::function<void()>& f = nullptr)
{
if(f)
f();
}
使用默认函数的替代方法是:
void func(const std::function<void()>& f = std::function<void()>()) {
try {
f();
}
catch(std::bad_function_call e) {
}
}
使用异常捕获。 2之间的选择主要取决于你是否期望空案发生;几乎从不:有时与异常相比:在通话前进行测试。
问题提及if (f)
时,请使用nullptr
答案 3 :(得分:3)
您可以尝试这样:
const std::function<void()> & f = std::function<void()>()
正如Basile所说,标准说:
§20.8.11.1类bad_function_call [func.wrap.badcall]
1 /抛出bad_function_call类型的异常 function :: operator()(20.8.11.2.4)当函数包装器对象时 没有目标。