在boost中,如何将boost迭代器传递给以某种方式转换为std::string的函数
In boost, how to pass boost iterator to a function somehow casted as std::string
将特定问题作为以下代码末尾的注释。
std::string s("my sample string "with quotes"");
boost::escaped_list_separator<char>
els(""," ",""'");
boost::tokenizer<boost::escaped_list_separator<char> >::iterator
itr;
boost::tokenizer<boost::escaped_list_separator<char> >
tok(s, els);
itr=tok.begin();
if (itr!=tok.end())
fn_that_receives_pointer_to_std_string(itr); // <---- IS IT POSSIBLE TO SEND POINTER AND NOT HAVE TO CREATE A NEW STRING ??
boost::tokenizer<boost::escaped_list_separator<char> >::iterator
不是指向std::string
的指针,但您可以使用
std::string const *
&(*itr)
如果const
指针不是你必须传递的,你可以做
std::string s(*itr);
并传递&s
,这取决于fn_that_receives_pointer_to_std_string
的所有权语义。Boost Tokenizer不区分iterator
和const_iterator
,所以operator*
的结果总是const
。
*itr
实际上将返回basic_string
而不是string
,因此您需要将它们转换为另一个:
using namespace std;
using namespace boost;
void fn_that_receives_pointer_to_std_string(string* str)
{
cout << "str: " << *str << endl;
}
int main()
{
string s = "Field 1,"putting quotes around fields, allows commas",Field 3";
tokenizer<escaped_list_separator<char> > tok(s);
for(tokenizer<escaped_list_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg)
{
string tmp(*beg);
fn_that_receives_pointer_to_std_string(&tmp);
}
}
我不喜欢把string
的内存地址传递给另一个函数的想法。
对不起,这是不可能的。
这就是为什么规则"把字符串参数作为std::string
"是错误的原因。当模板不合适(例如单独编译)时,boost::iterator_range<const char*>
可以更好。
相关文章:
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- Boost buffer_cast 无法从 void* 转换为 PointerToPodType
- Boost.Spirit将表达转换为AST
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 将"boost::tuple "转换为"boost::fusion::tuple&quo
- 用于 boost::p roperty_tree 的通用枚举转换器
- 如何将 boost::hana::map 转换为 lambda
- 如何将 boost::hana::tuple 转换为 std::变体
- 将 boost::文件系统::p ath 转换为 char?
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- 为什么要 boost::p roperty_tree::write_json() 将整数值转换为字符串?这是不正确的
- 如何正确地将boost::asio::buffers_iterator转换为InputIterator
- 如何将boost::asio::ip::address_v6 ip转换为2个uint64_t数字,并从2个uint 64
- 如何将 boost::beast 的响应<buffer_body>转换为响应<string_body>?
- 为boost::dynamic_bitset生成哈希,并将哈希转换回boost::dynamic_bitset
- 如何将 time-uuid(存储在 boost uuid 中)转换为时间戳/自纪元以来的时间?
- 将 boost:::chrono::steady_clock::time_point 转换为标准::时间::steady
- n-ary布尔语法从中缀到前缀的Boost::Spirit转换?
- 寻找Boost转换迭代器的复合特征模式
- 使用boost转换度、分、秒、弧度