Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумАртПаттерныАнтипаттерныЗаметкиВопрос-ответКнигорецензииСправочная

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;
}
Компилировать в Comeau
Если вы знаете, каким образом происходит поиск наиболее подходящей функции, особых сложностей у вас возникнуть не должно. Я специально объявил все функции как private, чтобы после ошибки, которую выдаст вам Comeau, вы смогли увидеть правильный ответ. На всякий случай можно ознакомиться с правильным ответом.
Наиболее подходящая функция — предпоследняя. Чуть меньше подходит первая, еще меньше — вторая. Последняя функция не будет вызвана ни при каких условиях, поскольку это невыводимый контекст.

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

Коллекции одежды. Камуфляж - основные средства защиты. Sigma объектив фотоаппарат! фото штативы.. изготовление зданий из металлоконструкций. раскрутка Элиста. где купить телефон сотовый. скачать nfs, need for speed