template< class T >
class Foo {
public:
Foo(T t) { }
};
int main() {
int i = 0;
Foo f(i);
}
W powyższym kodzie kompilator skarży się, że argumenty szablonu nie występują przed "f". Rozumiem, że dedukowanie argumentów szablonu dla klasy z argumentów do konstruktora nie jest częścią standardu, ale moje pytanie brzmi: dlaczego? Czy kompilator nie ma wszystkich informacji, których potrzebuje do niejawnego utworzenia instancji Foo<int>
i wywołania swojego konstruktora?Dlaczego konstruktorzy nie mogą wyprowadzać argumentów szablonu?
Zmieniano aby było jasne, że dzwonię z konstruktora z int
(w przeciwieństwie do short
, long
, void*
itp)
Czy 0 to także 'bool' lub' char' lub wskaźnik? czy to tylko niejawna konwersja? – mstbaum
Jeśli chodzi o problem praktyczny (nie dlatego), przy obecnym C++ wystarczy użyć funkcji fabrycznej. –
@mstbaum: Wprawdzie nie jestem pewien, czy jest to istotne, ponieważ zamiar jest wyraźnie zgodny z tym samym argumentem odejmowania argumentów jako funkcji, gdzie wszystko to jest jasno określone. –