如何将 Corba 结构(包含“任何”类型)复制到 C++ 结构中
Posted
技术标签:
【中文标题】如何将 Corba 结构(包含“任何”类型)复制到 C++ 结构中【英文标题】:How to copy a Corba struct (containing an "any" type) into a C++ struct 【发布时间】:2020-11-05 18:02:06 【问题描述】:在 Corba 中,我有一个这样的结构:
module XYZ
typedef string AttributeName;
struct AttributeColumn
AttributeName name; // Column attribute name
any data; // Column attribute value
;
typedef sequence <AttributeColumn> AttributeTable;
它包含来自相应 Sqlite 数据库表的值,该表具有以下字段:
ABC_Name VARCHAR NOT NULL UNIQUE
我想将这些值复制到 C++ 结构中,该结构由以下内容组成:
namespace DEF
typedef std::string AttributeName;
typedef std::vector<std::string> StringCol;
struct AttributeColumn
AttributeName name; // Column attribute name
StringCol str; // Column values if string
;
typedef std::vector<AttributeColumn> AttributeTable;
这是我的尝试:
XYZ::AttributeTable & xyz_table = getAttributeTable (); // This gives me the table containing the data from the database.
int rows = getLength ( xyz_table ); // This gives me the number of rows in the database.
DEF::AttributeTable def_table;
for (int i=0;i<rows;i++)
def_table[i].name = xyz_table[i].name;
std::cout << def_table[i].name << std::endl;
xyz_table[i].data >>= def_table[i].str;
std::cout << def_table[i].str << std::endl;
但是,以上内容无法编译。 我收到以下错误消息:
ERROR: 1> error: no match for ‘operator>>=’ (operand types are ‘CORBA::Any’ and ‘DEF::StringCol’ aka ‘std::vector<std::basic_string<char> >’)
如果我注释掉 for 循环中的最后两行,则代码会编译,但会崩溃。 因此,不知何故,将“名称”字段复制到 def_table 中也无法正常工作。
【问题讨论】:
您使用的是哪种 CORBA 实现?你试过TAOX11吗? 嗨,我对 CORBA 实现一无所知。我可以访问的唯一 CORBA 元素是 .idl 文件,我无法对其进行修改。我怎样才能发现该文件使用了什么实现? 您使用哪个 IDL 编译器来编译 IDL 文件,该 IDL 编译器与您的 CORBA 实现有关。 您还必须链接一些由您的 CORBA 实现提供的 CORBA 库。也许remedy.nl/opensource/corbapg.html 的 CORBA 程序员指南是一个好的开始 【参考方案1】:试试这个:
namespace DEF
typedef std::string AttributeName;
typedef std::vector<std::string> StringCol;
struct AttributeColumn
AttributeName name; // Column attribute name
CORBA::Any str; // Column values if string
;
typedef std::vector<AttributeColumn> AttributeTable;
;
因为str需要是同一类型的数据。
【讨论】:
以上是关于如何将 Corba 结构(包含“任何”类型)复制到 C++ 结构中的主要内容,如果未能解决你的问题,请参考以下文章