在为对象分配值时遇到问题。我的对象定义说:
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
在您的问题中提供的信息有限的情况下,我假设您想根据可能为字符串或整数或其他形式的输入来更改指针“对象”的值。
检查此程序,我使用了“ 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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句