c++ - 使用 operator= 从对象分配 std::string

标签 c++ operators decorator

我真的很想能够从我正在编写的 DecoratedString 对象中分配一个 std::string 对象。

class DecoratedString
{
private:
    std::string m_String;
public:
     DecoratedString(const std::string& initvalue)
     : m_String(initvalue)
     {
     }

     const std::string& ToString() const
     {
         return m_String;
     }

     const std::string& operator=(const DecoratedString& rhs)
     {
         return rhs.ToString();
     }

}

我已经编写了一个单元测试来确保它有效:

void DecoratedStringTest::testAssignmentToString()
{
    std::string expected("test");
    DecoratedString sut(expected);
    std::string actual;
    actual = sut;

    CPPUNIT_ASSERT_EQUAL(actual, sut.ToString());
}

但是,编译器显示错误:“actual = sut”中的“operator=”不匹配。然后它会列出标准库中重载的 operator= 选项。

为什么编译器找不到 operator= 我定义的?

编辑:

所以我想我需要一个转换 运算符,而不是赋值 运算符。非常感谢看到我正在尝试做的事情并解释我应该做什么的人。

最佳答案

您定义的运算符 = 用于将装饰字符串分配给其他装饰字符串并从该分配返回一个 std::string。

你想要的是一个成员“转换运算符”,它可以在需要时自动将装饰字符串转换为 std::string,如下所示:

operator std::string const &() const { return ToString(); }

这也会在需要时自动将装饰字符串转换为 std::string const &(即,当与 std::string 进行比较时,或将 DecoratedString 传递给接受函数的函数时)一个 std::string const &).

关于c++ - 使用 operator= 从对象分配 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220287/

相关文章:

c++ - 2分区浮力优化

c++ - 更有效地使用确定用户输入获胜者的功能

java - 后缀一元运算符到底什么时候发生?

c++ - 在 C++ 中重载 +=

python - 如何在 Python3 中切换装饰器的操作

c++ - 在 GUI 线程之外打印 QWidget(渲染)

c++ - 在 catch-all 回调中识别来自 QDBusPendingCallWatcher 的原始调用

c++ - 使用cin函数在c++中输入数学运算

c# - 动态创建装饰器链

scala - Mixin 来包装 Scala 特征的每个方法