![]() |
2. Перегрузка функций | ||
Какую из функций компилятор посчитает наиболее подходящей для вызова? |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | template <class T> struct wrapper { template <class U> struct nested { typedef U type; }; typedef typename nested<T>::type type; }; class helper { private: static void foo(char x); static void foo(...); template <class T> static void foo(T t); template <class T> static void foo(typename wrapper<T>::type t); }; int main() { int n = 0; helper::foo(n); return 0; } |
Если вы знаете, каким образом происходит поиск наиболее подходящей функции, особых сложностей у вас возникнуть не должно. Я специально объявил все функции как private, чтобы после ошибки, которую выдаст вам Comeau, вы смогли увидеть правильный ответ. На всякий случай можно ознакомиться с правильным ответом. | ||
Наиболее подходящая функция — предпоследняя. Чуть меньше подходит первая, еще меньше — вторая. Последняя функция не будет вызвана ни при каких условиях, поскольку это невыводимый контекст. |
|
Статистика |
|