I have a template class and want to know, how to get template class variable type when it is used as a template parameter of function. I tried to do the following
#include <iostream>
#include <type_traits>
using namespace std;
template <typename T>
class foo
{
};
template <typename templateClass>
void f()
{
if (is_same<typename templateClass::T, int>::value)
cout << "int";
else if (is_same<typename templateClass::T, double>::value)
cout << "double";
else
cout << "Unknown type";
}
int main()
{
f<foo<double>>();
return 0;
}
This code does not compile, because no type named 'T' in 'foo<double>'.
Then I changed it a little bit:
#include <iostream>
#include <type_traits>
using namespace std;
template <typename T>
class foo
{
public:
using Type = T; //can't write : using T = T;
};
template <typename templateClass>
void f()
{
if (is_same<typename templateClass::Type, int>::value)
cout << "int";
else if (is_same<typename templateClass::Type, double>::value)
cout << "double";
else
cout << "Unknown type";
}
int main()
{
f<foo<double>>();
return 0;
}
Now it works fine, but I had to rename template parameter. Can I get template parameter value without renaming it with using?