C++如何处理与具有默认参数的函数相关的函数指针?
如果我有:
void foo(int i, float f = 0.0f);
void bar(int i, float f);
void (*func_ptr1)(int);
void (*func_ptr2)(int, float);
void (*func_ptr3)(int, float = 10.0f);
Run Code Online (Sandbox Code Playgroud)
哪个函数指针可以用于哪个函数?
我有Mult, Add, Div, Sub, Mod那些需要两个整数并返回其参数结果的函数。还有一个函数Calc,该函数将一个字符作为,Operator并返回一个指针,该函数返回一个整数,并接受两个整数参数,例如Mult。
Mult的第二个参数default这样的函数是So,当我调用时Calc,根据的参数值Calc返回Mult或Add... 的地址,Calc因此我只能传递一个参数。但这不适用于函数指针:
int Add(int x, int y = 2) { // y is default
return x + y;
}
int Mult(int x, int y = 2) { // y is default
return x * y;
}
int Div(int x, int y = 2) { // y is default
return y ? x …Run Code Online (Sandbox Code Playgroud) 我有一个vectorofstrings和一个空vector的int:
vector<string> ints_as_strings;
vector<int> ints_as_ints;
Run Code Online (Sandbox Code Playgroud)
目标是将前者转变为后者。
std::transform与 lambda 一起工作:
std::transform(ints_as_strings.begin(),
ints_as_strings.end(),
back_inserter(ints_as_ints),
[](const string& s) {return std::stoi(s);});
Run Code Online (Sandbox Code Playgroud)
然而我只想使用std::stoi.
传递我的函数的地址mystoi是有效的:
int mystoi(string s) {return stoi(s);}
std::transform(ints_as_strings.begin(),
ints_as_strings.end(),
back_inserter(ints_as_ints),
&mystoi);
Run Code Online (Sandbox Code Playgroud)
但是,直接传递地址是std::stoi行不通的。这是因为额外的参数(但是提供了默认值)吗?