2012-02-18 71 views
1

所以我有這樣的:不能超載的std :: string常量和函數爲const char *

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

有什麼特別的原因?

謝謝,

朱利安。

回答

4

您不能僅基於返回類型進行重載,因爲在重載解析期間不考慮返回類型。

兩個重載必須具有不同的參數類型,不同數量的參數或(對於成員函數)不同的const-,volatile-和reference-qualification。

1

因爲返回類型不是函數重載的標準。

相關問題