Предположим, у меня есть шаблон, который принимает 3 параметра шаблона.Я хочу, чтобы третий параметр шаблона был взят другим шаблоном, скажем «CHECK», который может вернуть любое целое число в случае сбоя CHECK, иначе «1».В случае «1» класс X является специализированным.Как показано в следующем коде.Как я могу этого добиться, то есть как заставить всегда использовать аргумент шаблона по умолчанию (цель состоит в том, чтобы сделать его обязательным, а не по умолчанию).Вкратце: «Я хочу запретить пользователям вводить третий параметр».
template<typename T, typename D , int = CHECK<T, D>::IS_TRUE >
class X
{
public :
X()
{
using namespace std;
cout << "Inside General Implementation " << endl;
}
};
template<typename T, typename D>
class X<T, D, 1>
{
public :
X()
{
using namespace std;
cout << "Inside SPECIAL Implementation " << endl;
}
//Specialized Implementaion
};
int main(int argc, char* argv[]) try
{
X<MyWiget, YourWiget > xObj ; //CHECK used desired behaviour
X<MyWiget, YourWiget, 1 > xObj ; //CHECK not used specialized behaviour
X<MyWiget, YourWiget, 2 > xObj ; //CHECK not used i.e. default template argument not used
}
catch(...)
{
//should not land here
using namespace std;
cout << " Problems in exception handling in code";
}