2013-12-20 3 views
0

У меня проблема с присвоением значения объекту. мое определение объекта говорит:Как я могу изменить тип значения объекта в C++

class myobject { 
    public: 
    var_type type; 
    union value_type value; 
    myobject(int value); 
    myobject(string value); 
    ... 
}; 

enum var_type { 
    var_int, 
    var_str, 
    var_float 
}; 

union value_type { 
    int; 
    real; 
    string; 
}; 

myobject* object = get_object("name"); 
//here i need to change its value, i dont have any setvalue function. 

Теперь в какой-либо другой файл, мне нужно обновить значение MyObject, но я не знаю, тип значения. скажем, initial value_type - int, а моя функция присваивает ему строку, я получаю абсурдное значение в doign GetValue(). Что должно быть более эффективным способом получения типа значения объекта, измените мое строковое значение на старый тип значения, который он поддерживает и модифицировал. Я не могу изменить класс определения myobject.

Благодаря Ручьи

+0

Что вы имеете в виду, что не знаете тип значения? Разве это не 'object-> type'? –

+0

Обратите внимание, что вам нужно будет изменить определение, по крайней мере, достаточно, чтобы перечислить его перед классом. –

ответ

0

С ограниченной информацией, предоставленной в вашем вопросе я предполагаю, что вы хотите изменить значение указателя «объект» в зависимости от ввода, который может строку или Int или что-то другое.

Проверьте эту программу, я использую «boost :: any» и typeid. Просмотрите этот параметр и протестируйте его в своей программе. Else явно объясняют с помощью примера кода, чего вы хотите достичь.

Также соединение с строкой даст вам проблемы с компиляцией? Это не?

#include <iostream> 
#include <string> 
#include <typeinfo> 
#include <boost/any.hpp> 
#include <boost/unordered_map.hpp> 
#include<list> 

using namespace std; 

class myobject { 
    public: 
    myobject(int value) 
    {cout<<"int ctr"<<endl;} 
    myobject(std::string value) 
    {cout<<"string ctr"<<endl;} 
}; 

int main() 
{ 
    list<boost::any> valueType; 

    std::string valStr("name"); 

    valueType.push_back(valStr); 

    int num = 10; 

    valueType.push_back(num); 

    myobject* object = NULL; 

    for(list<boost::any>::iterator itr = valueType.begin(); 
     itr != valueType.end(); 
     ++itr) 
    { 
    if((*itr).type() == typeid(std::string)) 
     object = new myobject((boost::any_cast<std::string>(*itr))); 
    else if((*itr).type() == typeid(int)) 
     object = new myobject((boost::any_cast<int>(*itr))); 
    } 

    return 0; 
} 
Смежные вопросы