template <typename T>
class myTemplateClass
{
public:
myTemplateClass()
{
// do something
}
myTemplateClass(T t)
: val{t}
{
// do something
}
T val;
};
class mySimpleClass
{
public:
mySimpleClass()
{
// do something
}
};
template <template<typename> class TT, typename T = void>
auto create()
{
if constexpr (std::is_same_v<TT<T>, myTemplateClass<T>>)
{
// do something
// and return
return myTemplateClass<T>();
}
else
{
//constexpr (std::is_same_v<TT, mySimpleClass>)
// do something
// and return
return mySimpleClass{};
}
};
int main()
{
{
auto result = create<myTemplateClass<int>>();
}
{
auto result = create<mySimpleClass>();
}
return 0;
}
I tried to implement one create()
function which return one of a template class and a normal class based on template parameter, but it has an error.
How can I implement create()
to support this situation?
mostly, it is used as like
create<int>();
create<double>();
but if I want to mix as like create<myTemplateClass>() and create in one create function based one template function, is there any way?