无法重载std :: string const&使用const char *的函数

时间:2012-02-18 19:06:20

标签: c++ overloading

所以我得到了这个:

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()’

这有什么特别的原因吗?

谢谢,

儒略。

2 个答案:

答案 0 :(得分:4)

您不能仅基于返回类型重载,因为在重载解析期间不考虑返回类型。

两个重载必须具有不同的参数类型,不同数量的参数或(对于成员函数)不同的const,volatile和reference-qualification。

答案 1 :(得分:1)

因为返回类型不是函数重载的标准。