template< class T >
class Foo {
public:
Foo(T t) { }
};
int main() {
int i = 0;
Foo f(i);
}
В приведенном выше коде компилятор жалуется, что аргументы шаблона отсутствуют до «f». Я понимаю, что вывод аргументов шаблона для класса из аргументов конструктору не является частью стандарта, но почему мой вопрос? Разве компилятор не имеет всей необходимой информации, чтобы неявно создать экземпляр Foo<int>
и вызвать его конструктор?Почему конструкторы не могут выводить аргументы шаблона?
Отредактированный, чтобы понять, что я называю конструктор с int
(в отличие от short
, long
, void*
и т.д.)
Не может 0 также представлять 'bool' или' char' или указатель? или это просто неявное преобразование? – mstbaum
Что касается практической проблемы (а не почему), то с текущим C++ просто используйте заводскую функцию. –
@mstbaum: Хотя верно, я не уверен, что это актуально, так как намерение явно состоит в том, чтобы следовать одному и тому же выводу аргумента шаблона как функции, где все это четко указано. –