下面是使用std::function
的简单示例
#include <iostream>
#include <functional>
//A function that sums two numbers.
//Arguments having default values.
void SumOfTwoNumbers(int a = 42, int b = 42)
{
std::cout << "Sum of two numbers :: " << a + b << std::endl;
}
int main()
{
std::function<void(int, int)> testFunc = SumOfTwoNumbers;
SumOfTwoNumbers(); //Works
testFunc(); //Compile time error
testFunc(40, 40); //Works
return 0;
}
在main函数中,有三个函数调用。第一个和最后一个都能工作。而第二个调用testFunc()
时没有任何参数,会产生编译时错误。
它不应该考虑默认参数并成功执行吗?
1条答案
按热度按时间e4yzc0pl1#
不,函数参数的默认值不是函数签名的一部分。它们只在调用点求值。
你可以使用lambda,但是你需要重新定义默认值:
...并且将这样的lambda存储在
std::function
中将再次导致相同的问题,因为lambda的签名也是void(int, int)
。但是,您 * 可以 * 定义自己的 Package 器函子(而不是使用
std::function
),它具有 * 多个 *operator()
重载: