【发布时间】:2011-12-06 11:28:05
【问题描述】:
我有一个模板化的类
template <typename T>
class Factors
{
public:
Factors(){};
deque<string> stringsDeck;
// some methods and variables here
map <string, string> getNext();
};
getNext 方法将用作键的字符串与用作值的stringsDeck 中的字符串组合在一起,并返回map <string,string>。
假设我已经模板化了stringify 和string2num 函数,我想要一个方法map<string,Scalar> getNext(),除了字符串之外的所有其他类型都可以将映射的值转换为指定的模板类型T。
编译器不允许我重载两个同名但返回类型不同的方法,具体来说:
map <string, T > getNext()
{
// converts the values of getNext() return map into the specified type T
return convertedMapWithValuesOfTypeT;
}
在这种情况下有什么解决方案?我想为字符串和其他类型(基本上可以通过词法转换从字符串转换的数字类型)保持方法的名称相同
【问题讨论】:
-
那么在调用
getNext()时如何指定是要map<string, string>还是map<string, T>?或者你的意思是你想要map<string, T>,如果这两个函数是为T定义的(其中T是封闭类模板的参数)和string否则?
标签: c++ templates stl map overloading