我在为对象赋值方面遇到了问题。 我的对象定义说:
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的值,但我不知道值类型。假设初始value_type是int,我的函数给它分配一个字符串,我在doign GetValue()得到荒谬的值。 什么应该是更有效的方式来获取对象的值类型,将我的字符串值更改为它支持和修改它的旧值类型。我无法改变myobject的定义类。
由于 Ruchi
答案 0 :(得分:0)
在您的问题中提供的信息有限,我假设您想要根据输入字符串或int或其他内容更改指针“object”的值。
检查这个程序,我使用“boost :: any”和typeid。查看此选项并在您的程序中进行测试。否则,请使用一些代码示例明确说明您想要实现的目标。
与字符串联合会给你编译问题吗?不是吗?
#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;
}