我如何在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

一世

在您的问题中提供的信息有限的情况下,我假设您想根据可能为字符串或整数或其他形式的输入来更改指针“对象”的值。

检查此程序,我使用了“ 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章