Я пытаюсь построить класс, который имеет функцию-член с методом в качестве аргумента. Методы определены в унаследованных классах. Я строй минимального примера:Передача унаследованного метода другому методу
#include <iostream>
struct base
{
base() {}
int number(int (*f)(int))
{
return f(1);
}
};
struct option1 : base
{
int timesTwo(int i){return 2*i;}
option1()
{
std::cout << number(timesTwo);
}
};
struct option2 : base
{
int timesThree(int i){return 3*i;}
int timesFour (int i){return 4*i;}
option2()
{
std::cout << number(timesThree);
}
};
int main()
{
option1 a; //I would expect this to print "2"
}
Текущий синтаксис функции number
для общей функции, но я не могу заставить его работать для метода любых унаследованных классов.
Спасибо! Не могли бы вы продолжить, если я буду беспокоиться о решении просто добавить 'static'? Я понимаю, что использование 'std :: function' является более общим, но я уверен, что мне не придется вызывать функцию в каких-либо других обстоятельствах. – RobVerheyen
@RobVerheyen Если передаваемая вами функция никогда не получит доступа к нестационарным членам в классе, в котором она определена, вы можете сделать ее «статической» без забот. –