У меня есть функции Mult, Add, Div, Sub, Mod
, которые принимают два целых числа и возвращают результат своих параметров. И функция Calc
, которая принимает символ как Operator
и возвращает указатель на функцию, которая возвращает целое число и принимает два целочисленных параметра, таких как Mult
.
- Такие функции, как
Mult
, вторым параметром являетсяdefault
Поэтому, когда я вызываю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 / y : -1;
}
int Sub(int x, int y = 2) { // y is default
return x - y;
}
int Mod(int x, int y = 2) { // y is default
return y ? x % y : -1;
}
using pFn = int(*)(int, int);
pFn Calc(char c) {
switch (c) {
case '+':
return Add;
case '*':
return Mult;
case '/':
return Div;
case '-':
return Sub;
case '%':
return Mod;
}
return Mult;
}
int main(int argc, char* argv[]){
pFn func = Calc('%');
cout << func(7, 4) << endl; // ok
//cout << func(7) << endl; // error: Too few arguments
cout << Mult(4) << endl; // ok. the second argument is default
func = Calc('/'); // ok
cout << func(75, 12) << endl; // ok
std::cout << std::endl;
}
Выше, если я вызываю Mult
с одним аргументом, он работает нормально, потому что второй аргумент по умолчанию, но вызов его через указатель func
не работает. func — это указатель на функцию, которая принимает два целых числа и возвращает целое число.
Double
принимать целочисленный параметр, который он не использует? - person scohe001   schedule 16.04.2019Double
функция возвращает указатель на функцию из нескольких вариантов: например:switch(x){ case 1: return Mult; break; case 2: return Add;}
. - person Syfu_H   schedule 17.04.2019using pFn = int(*)(int, int = 2);
или что-то в этом роде может сработать. - person glglgl   schedule 18.04.2019