将 boost::container::boost basic_string 转换为 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);
正如@T.C.所说,你应该使用:
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());
}
根据
@T.C的评论进行了更改。
您可以使用这个:
std::string s(my_basic_string.c_str(), my_basic_string.size());
相关文章:
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- std::string references、std::regex和boost::filesystem的基本概念
- 将 std::string 转换为 boost::asio::streambuf
- 使用 boost::interprocess 共享内存时从 std::string 转换为 "MyShmString"
- 当我使用py 生成时,然后在macOS上boost.python包装器时,我会发现有关std :: string的错
- 如何在 Boost.Sprit.Qi 中从向量制作组合的 ascii::string 规则<string>?
- boost-python 当C++方法返回 std::map<string,X*>
- 从 boost::存档:binary_iarchive 反序列化 std::string 时出现错误的分配异常
- 从 C 字符串构造 boost::type_erasure::any,但存储为 std::string
- boost::asio::async_write with std::string
- 如何将std :: string转换为boost :: chrono :: nanseconds
- 使用Boost Karma替换STD :: stringstream double到STD :: String Conv
- 无法获得 boost::spirit parser&lexer 适用于 std::string 或 int 或 double 以外的令牌类型
- `boost::local_time::date_time` from `std::string`
- 从STD :: String Boost C 获取小时和几分钟
- 将Boost STD :: String :: const_iterator转换为字符串和INT C
- 为什么 boost::assign::list_of 不适用于对字符串、矢量<string>><?
- 如何将 std::vector<std::string> 转换为 boost::spirit 中结构的成员?
- 从BOOST STRING返回某些字符