Poniższy kod generuje błąd kompilacji w Xcode:niejawne Parametry szablonu
template <typename T>
struct Foo
{
Foo(T Value)
{
}
};
int main()
{
Foo MyFoo(123);
return 0;
}
error: missing template arguments before 'MyFoo'
Zmiana Foo MyFoo(123);
do Foo<int> MyFoo(123);
rozwiązuje problem, ale nie powinna kompilator być w stanie dowiedzieć się odpowiedni typ danych?
Czy jest to błąd kompilatora, czy też nieporozumienia niejawne parametry szablonu?
jeśli mogłoby to wywnioskować typ, może wnioskować przestrzeń. –
Może określić typ wywołania konstruktora, ale nie dla miejsca do przechowywania. Jeśli zdefiniujesz zmienną jako po prostu 'Foo', czy może ona zawierać zarówno' Foo 'i' Foo '? Czy może zawsze wie, że w głębi serca jest "Foo "? Gdyby zmienna była "const", to mogłaby zostać zaimplementowana, ponieważ nie można było zmienić jej wartości, ale wtedy mielibyśmy różne reguły leksykalne dla 'const T' vs' T' i nastąpiłoby wielkie spustoszenie. –