Не удается перегрузить std :: string const & function с помощью const char * - PullRequest
1 голос
/ 18 февраля 2012

так что у меня есть это:

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 ]

4 голосов
/ 18 февраля 2012

Нельзя перегрузить только на основе типа возвращаемого значения, поскольку тип возвращаемого значения не учитывается при разрешении перегрузки.

Две перегрузки должны иметь разные типы параметров, разное количество параметров или (для функций-членов) разную постоянную, изменчивую и справочную квалификацию.

1 голос
/ 18 февраля 2012

Поскольку тип возвращаемого значения не является критерием перегрузки функции.

...