2015-10-02 3 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) 
{...} 

Я бледный Desing класс Wich работает следующим образом:

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-can-cast -в-другому-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 
} 
Смежные вопросы