我有一个模板类,并想知道当它作为函数的模板参数时,如何获取模板类变量类型。 我尝试做以下操作:
#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;
}
这段代码无法编译,因为在 foo<double>
中没有名为“T”的类型。
然后我稍微改了一下:
#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;
}
现在程序可以正常工作,但我不得不重命名模板参数。我能否在不使用 using
重命名模板参数的情况下获取模板参数的值?
T
,而是在重命名double
。 - littleadvf<std::string>()
怎么样?也就是说,这不是由foo
生成的拼写错误?您想要解决的实际问题是什么? - Ulrich Eckhardt