有没有办法可以直接发送 std::string 变量而不复制它?
不,当然不安全。
如果您可以控制该库,我建议您进行轻微的重构。
要么添加:
template<typename CharT>
void WriteBinary(CharT const* buffer, size_t count);
或者:
template<typename FwdIter>
void WriteBinary(FwdIter begin, FwdIter end);
然后让你存在WriteBinary
并WriteString
调用它:
void WriteBinary(std::vector<uint8_t> const& vec)
{ WriteBinary(&*vec.begin(), vec.size()); }
void WriteString(std::string const& s)
{ WriteBinary(&*s.begin(), s.size()); }
或者:
void WriteBinary(std::vector<uint8_t> const& vec)
{ WriteBinary(vec.begin(), vec.end()); }
void WriteString(std::string const& s)
{ WriteBinary(s.begin(), s.end()); }
就个人而言,我更喜欢基于迭代器的方法。感觉“更干净”。
(注意:对于指针/大小方法,您可能想要检查是否为空。如果您尊重begin()
空向量/字符串的结果,某些实现可能会断言。)