所以我得到了这个:
class SettingBase {
public:
virtual ~SettingBase() { }
};
template<typename T>
class Setting : private SettingBase {
friend class Section;
public:
std::string const &get_name() { return name; } // and my compiler
const char *get_name() { return name.c_str(); } // doesn't like this.
T const &get_value() throw() { return value; }
private:
Setting(std::string name, T value) : name(name), value(value) { }
Setting(const char *name, T value) : name(std::string(name)), value(value) { }
std::string name;
T value;
};
然后gcc说
config.cpp:74:17: error: ‘const char* Setting<T>::get_name()’ cannot be overloaded
config.cpp:73:24: error: with ‘const std::string& Setting<T>::get_name()’
这有什么特别的原因吗?
谢谢,
儒略。
答案 0 :(得分:4)
您不能仅基于返回类型重载,因为在重载解析期间不考虑返回类型。
两个重载必须具有不同的参数类型,不同数量的参数或(对于成员函数)不同的const,volatile和reference-qualification。
答案 1 :(得分:1)
因为返回类型不是函数重载的标准。