এখনও অবধি, ফাংশন টেম্পলেটগুলির জন্য ডিফল্ট টেম্পলেট প্যারামিটারগুলির সমস্ত প্রোফাইড উদাহরণ ওভারলোডগুলি দিয়ে সম্পন্ন করা যেতে পারে।
Arak:
struct S {
template <class R = int> R get_me_R() { return R(); }
};
হতে পারে:
struct S {
template <class R> R get_me_R() { return R(); }
int get_me_R() { return int(); }
};
আমার নিজের:
template <int N = 1> int &increment(int &i) { i += N; return i; }
হতে পারে:
template <int N> int &increment(int &i) { i += N; return i; }
int &increment(int &i) { return increment<1>(i); }
litb:
template<typename Iterator, typename Comp = std::less<Iterator> >
void sort(Iterator beg, Iterator end, Comp c = Comp())
হতে পারে:
template<typename Iterator>
void sort(Iterator beg, Iterator end, std::less<Iterator> c = std::less<Iterator>())
template<typename Iterator, typename Comp >
void sort(Iterator beg, Iterator end, Comp c = Comp())
স্ট্রোভস্ট্রুপের:
template <class T, class U = double>
void f(T t = 0, U u = 0);
হতে পারে:
template <typename S, typename T> void f(S s = 0, T t = 0);
template <typename S> void f(S s = 0, double t = 0);
যা আমি নিম্নলিখিত কোড দিয়ে প্রমাণ করেছি:
#include <iostream>
#include <string>
#include <sstream>
#include <ctype.h>
template <typename T> T prettify(T t) { return t; }
std::string prettify(char c) {
std::stringstream ss;
if (isprint((unsigned char)c)) {
ss << "'" << c << "'";
} else {
ss << (int)c;
}
return ss.str();
}
template <typename S, typename T> void g(S s, T t){
std::cout << "f<" << typeid(S).name() << "," << typeid(T).name()
<< ">(" << s << "," << prettify(t) << ")\n";
}
template <typename S, typename T> void f(S s = 0, T t = 0){
g<S,T>(s,t);
}
template <typename S> void f(S s = 0, double t = 0) {
g<S,double>(s, t);
}
int main() {
f(1, 'c'); // f<int,char>(1,'c')
f(1); // f<int,double>(1,0)
// f(); // error: T cannot be deduced
f<int>(); // f<int,double>(0,0)
f<int,char>(); // f<int,char>(0,0)
}
মুদ্রিত আউটপুটটি প্রতিটি কলের চ-এর মন্তব্যের সাথে মেলে এবং মন্তব্য-আউট কল প্রত্যাশার মতো সংকলন করতে ব্যর্থ।
সুতরাং আমি সন্দেহ করি যে ডিফল্ট টেম্পলেট প্যারামিটারগুলি "প্রয়োজন হয় না" তবে সম্ভবত কেবল একই অর্থে যে ডিফল্ট ফাংশন যুক্তি "প্রয়োজন হয় না"। স্ট্রাস্ট্রাপের ত্রুটি প্রতিবেদনটি যেমন ইঙ্গিত দেয়, অনুন্নত পরামিতিগুলির সংযোজন কারও পক্ষে উপলব্ধি করতে এবং / অথবা সত্যই প্রশংসা করতে পারে যে এটি ডিফল্টকে কার্যকর করেছে। সুতরাং বর্তমান পরিস্থিতি কার্যকরভাবে ফাংশন টেম্পলেটগুলির একটি সংস্করণের উপর ভিত্তি করে যা কখনই প্রমিত ছিল না।