Второй бит бесконечно рекурсивен:
struct X2 : X
{
void my_func( char value ) { my_func(value); } //calls itself over and over again
};
Префикс my_func
с именем базового класса, и вы будете в порядке
struct X2 : X
{
void my_func( char value ) { X::my_func(value); }
};
РЕДАКТИРОВАТЬ Только что понял, что подпись базового класса my_func
отличается. Компилятор C ++ разрешает перегрузку функции статически, это означает, что он выберет функцию, которая лучше всего соответствует типу аргумента, поэтому он вызывает перегрузку char
.
Например:
char cChar = 'a';
myfunc(cChar);
void myfunc(char a){} //<-- this one is called
void myfunc(int a){}
int iInt = 1;
myfunc(iInt);
void myfunc(char a){}
void myfunc(int a){} //<-- this one is called
Спасибо, Чарльз Бейли. Приведенный выше код не применяется в этом случае, поскольку X2
my_func
скрывает базовый класс my_func
. Это оставляет единственное решение для определения функции с именем класса.