Państwo może zadeklarować klasę na matrycy którego definicja wskazuje argumenty domyślne, ale za każdym razem można odwołać klasę musi obejmować wszystkie swoje argumenty, aż zostanie wprowadzona definicja.
na przykład. Użyjmy std::vectorbez dołączania go (drugi argument std::vectorjest zdefiniowany domyślnie):
namespace std
{
template<typename, typename>
class vector;
}
#include <iostream>
template <typename S, typename T>
void Foo (const std::vector<S,T> & vector)
{
std::cout << "do vector stuff, eg., display size = "
<< vector.size() << std::endl;
}
template <typename T>
void Foo (const T & t)
{
std::cout << "do non-vector stuff..." << std::endl;
}
Możemy wtedy użyć go bez dołączania wektora, np .:
int main ()
{
Foo(3);
}
... Albo możemy używać go z std::vector , np .:
#include <vector>
int main ()
{
Foo(std::vector<int>(3));
}
Nie sprawdzałem standardów, ale działa to clang/ gccz -std=c++98maksymalnie do -std=c++17, więc jeśli nie jest to oficjalnie norma, to wygląda na to, że jest nieoficjalnie.