tao_idl -Gstl 不映射 std::string

Posted

技术标签:

【中文标题】tao_idl -Gstl 不映射 std::string【英文标题】:tao_idl -Gstl doesn't map std::string 【发布时间】:2018-10-01 16:14:26 【问题描述】:

我正在使用 opendds 和 tao/ace 从 idl 文件生成代码。

我的 idl 文件:

struct SSave

    string strr;
;

我这样生成代码:

opendds_idl Class.idl 
tao_idl -Gstl -I/usr/include/ Class.idl 
tao_idl -Gstl -I/usr/include/ ClassTypeSupport.idl
#-Gstl Generate the alternate C++ mapping for IDL strings and sequences

这是我在文件 ClassC.h 中得到的内容,例如:

#include <vector>    
#include <string> //inclusion of string
...
struct  SSave


    // TAO_IDL - Generated from
    // /build/opendds-3.13/ACE_TAO/TAO/TAO_IDL/be/be_type.cpp:304
    typedef SSave_var _var_type;
    typedef SSave_out _out_type;

    static void _tao_any_destructor (void *); 

    ::TAO::String_Manager strr; //NOT std::string
;
...

那么有没有办法告诉 TAO 映射 std::string 而不是 ::TAO::String_Manager?

注意:我使用的是 tao_idl 2.5.1 版本。

提前致谢。

【问题讨论】:

【参考方案1】:

OpenDDS 遵循 IDL 到 C++ 语言的映射,将 IDL 字符串映射到它自己的特定类型(如 tao_idl 生成的那样)。作为AXCIOMA 的一部分,我们为DDS 实现了IDL to C++11 语言映射,它将在下一个主要版本中支持OpenDDS。

顺便说一句,你已经在 OpenDDS 邮件列表上询问了this 并在那里得到了回复。

【讨论】:

以上是关于tao_idl -Gstl 不映射 std::string的主要内容,如果未能解决你的问题,请参考以下文章

std::find 条件语句未按预期工作

`std::find()` 用字符串产生奇怪的结果

如何使用 c++ 将字符串散列为 int?

将 std::string_view 传递给执行 const std::string& 的 API

可变参数模板模板和完美转发

如何检查是不是可以从给定类型构造模板类型