如何在c ++中更改对象的值类型

时间:2013-12-20 05:00:03

标签: 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的值,但我不知道值类型。假设初始value_type是int,我的函数给它分配一个字符串,我在doign GetValue()得到荒谬的值。 什么应该是更有效的方式来获取对象的值类型,将我的字符串值更改为它支持和修改它的旧值类型。我无法改变myobject的定义类。

由于 Ruchi

1 个答案:

答案 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;
}
相关问题