আপনি একটি টেম্প্লেটেড শ্রেণি ঘোষণা করতে পারেন যার সংজ্ঞাটি ডিফল্ট আর্গুমেন্টগুলি উল্লেখ করে, তবে যে কোনও সময় আপনি শ্রেণিটি উল্লেখ করেন আপনাকে সংজ্ঞাটি চালু না হওয়া পর্যন্ত অবশ্যই তার সমস্ত আর্গুমেন্ট অন্তর্ভুক্ত করতে হবে।
যেমন আসুন std::vector
এটি বাদ দিয়ে ব্যবহার করা যাক (এর দ্বিতীয় তর্কটি std::vector
একটি ডিফল্ট দিয়ে সংজ্ঞায়িত করা হয়):
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;
}
তারপরে আমরা ভেক্টরকে অন্তর্ভুক্ত না করে এটি ব্যবহার করতে পারি :
int main ()
{
Foo(3);
}
... অথবা আমরা এটি ব্যবহার করতে পারেন সঙ্গে std::vector
, যেমন .:
#include <vector>
int main ()
{
Foo(std::vector<int>(3));
}
আমি মানগুলি পরীক্ষা করে দেখিনি, তবে এটি কাজ করে clang
/ gcc
চালিয়ে -std=c++98
যায় -std=c++17
, সুতরাং এটি যদি আনুষ্ঠানিকভাবে কোনও মান না হয় তবে এটি আনুষ্ঠানিকভাবে বলে মনে হচ্ছে।