Sen edebilirsiniz kimin tanım varsayılan argümanlar bildiren bir templated sınıf bildirmek, ancak tanım tanıtıldı kadar sınıfına atıfta herhangi bir zaman kendisine ait tüm argümanları içermelidir.
Örneğin. std::vector
Dahil etmeden kullanalım (ikinci argüman std::vector
varsayılan olarak tanımlanmıştır):
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;
}
Daha sonra vektörü eklemeden kullanabiliriz , örneğin:
int main ()
{
Foo(3);
}
... Ya da birlikte kullanabiliriz std::vector
, örneğin:
#include <vector>
int main ()
{
Foo(std::vector<int>(3));
}
Standartları kontrol etmedim, ancak bu işe yarıyor clang
/ gcc
sonuna -std=c++98
kadar çalışıyor -std=c++17
, yani resmi olarak bir standart değilse, resmi olmayan bir şekilde öyle görünüyor.