我正在尝试用const boost::interprocess::basic_string &替换返回const std::string &的类方法。我面临的主要挑战是这两个类之间的不兼容,尽管它们的实现相似。为了更清楚的解释,我会将其放入代码中
class A
{ std::string m_str;
const std::string & StrVal() { return m_str; }
}
现在这个类必须看起来像这样:
typedef boost::interprocess::allocator<char,boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocatorChar;
typedef boost::interprocess::basic_string<char, std::char_traits<char>,ShmemAllocatorChar> ShMemString;
class A
{
ShMemString m_str;
const ShMemString & StrVal() { return m_str; }
}
问题是我们有一个庞大的代码库,这取决于:
A a;
const std::string & str = a.StrVal();
// Many string specific operations go here, comparing str with other std::strings for instance
即使我用 const ShMemString & 替换了预期结果的所有代码,也修复以下用途将是一项更加艰巨的工作。我惊讶地发现 boost 的字符串不包含来自 std::string 的任何比较/构造方法。
关于如何解决这个问题的任何想法?