的錯過載我有這樣的代碼:C++編譯器選擇一個類的成員函數
template <class T>
class Something
{
T val;
public:
inline Something() : val() {}
inline Something(T v) : val(v) {}
inline T& get() const { return val; }
inline Something& operator =(const Something& a) { val = a.val; return *this; }
};
typedef Something<int> IntSomething;
typedef Something<const int> ConstIntSomething;
class Other
{
public:
IntSomething some_function()
{
return IntSomething(42);
}
ConstIntSomething some_function() const
{
return ConstIntSomething(42);
}
};
void wtf_func()
{
Other o;
ConstIntSomething s;
s = o.some_function();
}
但是,編譯器拾取的在wtf_func()
Other::some_function()
錯誤的過載(即,非const之一)。我怎樣才能解決這個問題?請注意,由於某些原因,我無法更改Other::some_function()
的名稱。
這是一個有點誤導,因爲你可以有'常量非'const'對象'會員功能,你可以給他們打電話。 –
@Seth Carnegie:沒錯,只是爲了說清楚。你可以在非const對象上調用const成員函數,但是你不能在const對象上調用非const成員函數。 –