[英]boost::interprocess::basic_string as std::string
[英]Convert boost::container::boost basic_string to std::string
有一个简单的方法吗? 我尝试过以下方法:
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);
正如@TC所说,你应该使用:
std::string s(my_basic_string.data(), my_basic_string.size());
要么
std::string s(my_basic_string.begin(), my_basic_string.end());
我更喜欢第二种,但两种都可以。
只需复制元素(任何体面的标准库实现优化到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());
}
根据@TC的评论改变了
你可以用这个:
std::string s(my_basic_string.c_str(), my_basic_string.size());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.