对不起,这是一个冗长的问题,但这是一个特定的问题。
假设我有两个课程,type1
和type2
:
struct type1 {
int getVal() {
return int();
}
};
struct type2 {
float getVal() {
return float();
}
};
如您所见,除getVal()
返回的类型外,它们执行相同的功能。现在,假设我想创建一个接受type1
或type2
作为输入的函数,并输出各自类型的std::vector
int
和{ {1}}。
我认为这样做的方法是创建一个这样的模板函数:
float
这几乎可行,但正如您从template<class T> vector<oh dear> something(T input) {
return {input.getVal(),input.getVal()};
}
所看到的,我无法创建正确的向量类型来返回。所以我想到了一个解决方案:只需输入oh dear
和type1
类中返回的类型,如:
type2
并将功能更改为:
struct type1 {
int getVal() {
return int();
}
typedef int subtype;
};
struct type2 {
float getVal() {
return float();
}
typedef float subtype;
};
哪个不编译。有没有办法解决我遇到的问题?
答案 0 :(得分:2)
您需要在typename
之前添加T::subtype
关键字,告诉编译器它是一个类型
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()};
}