将boost :: container :: boost basic_string转换为std :: string

时间:2015-06-17 22:40:18

标签: c++ boost stdstring boost-interprocess

有一种简单的方法吗? 我尝试了以下内容:

typedef allocator<char,managed_shared_memory::segment_manager>
    CharAllocator;
typedef boost::container::basic_string<char, std::char_traits<char>, CharAllocator>
    my_basic_string;

std::string s(my_basic_string);

3 个答案:

答案 0 :(得分:5)

As @ T.C。你说过,你应该使用:

std::string s(my_basic_string.data(), my_basic_string.size());

std::string s(my_basic_string.begin(), my_basic_string.end());

我更喜欢第二种,但两者都有效。

答案 1 :(得分:1)

只需复制元素(任何体面的标准库实现优化为memcpy):

#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>

using namespace boost::interprocess;
typedef allocator<char, managed_shared_memory::segment_manager> CharAllocator;
typedef boost::container::basic_string<char, std::char_traits<char>, CharAllocator> my_shared_string;

std::string s(my_shared_string const& ss) {
    return std::string(ss.begin(), ss.end());
}

我调用了字符串“my_shared_string”(因为它不再是std :: string的“基本”)。事实上,值得注意的是,这与使用自定义分配器的容器有关,特别是std :: string或Boost Interprocess没有任何内容:

typedef std::basic_string<char, std::char_traits<char>, CharAllocator> my_shared_string;
对于给定的问题,

表现完全相同;例如:

typedef std::vector<char, CharAllocator> my_shared_vector;

std::vector<char> v(my_shared_vector const& ss) {
    return std::vector<char>(ss.begin(), ss.end());
}

答案 2 :(得分:0)

根据@ T.C。

的评论进行了更改

你可以用这个:

std::string s(my_basic_string.c_str(), my_basic_string.size());