2012-02-18 87 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

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

相关问题