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::vector
bez dołączania go (drugi argument std::vector
jest 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
/ gcc
z -std=c++98
maksymalnie do -std=c++17
, więc jeśli nie jest to oficjalnie norma, to wygląda na to, że jest nieoficjalnie.