2015-10-02 161 views
-1

我有一個類(至極應該持有任何值)是這樣的:C++左手賦值運算符

class Value 
{ 

    public: 

     Value(); 
     Value(const Value& value); 
     virtual ~Value(); 
     void operator= (const Value& value); 

     template<class T> 
     void operator= (T value); 
... 
} 

現在我的問題:

我爲什麼不能執行賦值運算符該類像這樣的:

template<class T> 
void operator=(T& value, const Value& v) 
{...} 

我婉德興一類至極的工作如下:

Value v; 

v = 'c'; 
v = 13; 
v = 5.6; 
int i = 5; 
v = &i; 

int y = v; 
char b = v; 

我想把任何數據類型放入它並從中。 眼前這個工作得很好:

v = 'c'; 
v = 13; 
v = 5.6; 

但不適用於:

int y = v; 

什麼工作原理是:

int y = v.get<int>(); 

但這不是像你一樣

int y = v; 

將會是

+0

這是你的問題中的錯字?你是不是指'void operator ='? – melpomene

+1

請參閱[在可以轉換爲其他模板類型的類模板中重載賦值運算符](http://stackoverflow.com/questions/8305952/overloading-assignment-operator-in-a--class-template-that-c​​an-cast -to-另一個-TEM)。 – agold

+0

你爲什麼要這樣實現它?你認爲什麼問題會幫助你解決? –

回答

0

您可以輕鬆地通過添加模板類型投上您的課像修復編譯錯誤如下:

class Value 
{ 
... 
     template <class T> operator T(); 
}; 

Value va; 
int i = va; 

我仍然相信你會發現實施'boost :: any'任務的任務相當具有挑戰性,但爲什麼不呢? :)

0

因爲標準說賦值運算符必須是隻有一個參數的成員函數。

13.5.3 1 $分配[over.ass]:

賦值運算符,應以非靜態成員函數正好與一個參數來實現。

0

您可以實現一個類型轉換操作符這樣

operator int() 
{ 
    if(current_value_is_not_int) 
     throw MyException("Current value is not int"); 

    //return int value 
}