Шаблонный вычет типа в C++ для Класса по сравнению с Функцией?

Почему то, что автоматический вычет типа возможен только для функций а не для Классов?

15
задан yesraaj 17 December 2009 в 13:34
поделиться

3 ответа

В определенных случаях вы всегда можете сделать как std :: make_pair :

template<class T>
make_foo(T val) {
    return foo<T>(val);
}

РЕДАКТИРОВАТЬ: Я только что нашел следующее в "Язык программирования C ++, третий Edition », стр. 335. Бьярн говорит:

Обратите внимание, что аргументы шаблона класса никогда не выводил. Причина в том, что гибкость, обеспечиваемая несколькими конструкторы для класса сделают такой вывод невозможен во многих случаев и неясного во многих других.

Это, конечно, очень субъективно. Об этом уже говорилось в comp.std.c ++ , и похоже, что нет причин, по которым он не может поддерживаться. Другой вопрос, будет ли это хорошей идеей ...

17
ответ дан 1 December 2019 в 02:01
поделиться

В случае вызова функции компилятор выводит тип шаблона из типа аргумента. Например, функция std :: max . Компилятор использует тип аргументов для вывода параметра шаблона. Это не всегда работает, поскольку не все вызовы однозначны.

int a = 5;
float b = 10;

double result1 = std::min( a, b ); // error: template parameter ambigous
double result2 = std::min< double >( a, b ); // explicit parameter enforces use of conversion

В случае шаблонного класса это не всегда возможно. Возьмем, к примеру, этот класс:

template< class T>
class Foo {
public:
    Foo();
    void Bar( int a );
private:
    T m_Member;
};

Тип T никогда не появляется ни в одном вызове функции, поэтому компилятор не имеет никаких подсказок, какой тип следует использовать.

4
ответ дан 1 December 2019 в 02:01
поделиться

Я думаю, что неявное преобразование типов применимо только к аргументам функции только для того, чтобы компилятор мог вывести его, чтобы вызов функции был успешным.

Но как он может определить, какой тип вы хотите, чтобы он класс.

Нам нужно подождать 4 таких дня, когда у нас будет компилятор на основе AI , чтобы читать наши мысли.

1
ответ дан 1 December 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: