抱歉,这是一个冗长的问题,但这是一个具体的问题。
假设我有两个类,type1
和 type2
:
struct type1 {
int getVal() {
return int();
}
};
struct type2 {
float getVal() {
return float();
}
};
正如您所看到的,除了 getVal()
返回的类型之外,它们执行相同的功能。现在,假设我想要创建一个接受 type1
或 type2
作为输入的函数,并输出 std::vector
它们各自的类型:int
和 float
。
我的想法是创建一个像这样的模板函数:
template<class T> vector<oh dear> something(T input) {
return {input.getVal(),input.getVal()};
}
这几乎可以工作,但是正如您从哦亲爱的
中看到的,我无法创建要返回的正确类型的 vector 。所以我想到了一个解决方案:简单地 typedef 在 type1
和 type2
类中返回的类型,如下所示:
struct type1 {
int getVal() {
return int();
}
typedef int subtype;
};
struct type2 {
float getVal() {
return float();
}
typedef float subtype;
};
并将函数更改为:
template<class T> vector<T::subtype> something(T input) {
return {input.getVal(),input.getVal()};
}
这不能编译。有什么办法可以解决我遇到的问题吗?
最佳答案
您需要在T::subtype
之前添加typename
关键字来告诉编译器它是一种类型
template<class T>
std::vector<typename T::subtype> something(T input) {
return {input.getVal(),input.getVal()};
}
使用C++11,你可以让编译器自动找出类型
template<class T>
auto something(T input) -> std::vector<decltype(input.getVal())> {
return {input.getVal(),input.getVal()};
}
关于c++ - 从模板中的类获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352093/