指针包装所以我可以重载运算符?

时间:2012-03-08 20:22:46

标签: c++

我有一个不可变的字符串类,它由一个指针返回(允许它为null)。

我想重载ImmutableString* == const char*。然而,似乎我不能,因为左参数是一个指针,它必须是一个非指针。该函数确实处理比较null成员我不能重载它。

我可以使用什么指针包装器,所以我可以使用,所以我可以做我想要的重载?优选标准的。我怀疑我可以很容易地写自己的,但我的直觉说升压或者stl有一个。

2 个答案:

答案 0 :(得分:1)

我不知道这个标准包装器,但从头开始编写它不应该太难。一个非常简单的看起来像这样:

class WrappedImmutableString {
private:
    ImmutableString *value;
public:
    WrappedImmutableString(ImmutableString *value): value(value);
    char operator*() const { return value; } // dereference operator
    bool operator==(const char *other) {...}
    void delete() { delete value; }
};

但请注意,您需要将“delete myImmutableString”替换为“myImmutableString.delete()”。

话虽如此,我认为你想要做的事情可能是坏主意

答案 1 :(得分:0)

嗯......聪明的指针? std::auto_ptrstd::shared_ptr

但是为什么要比较那样的两个指针呢?在我看来,正确的方法是实现ImmutableString::operator == (const char*)并使用对象而不是指针。

 ImmutableString* is = foo();
 (*is) == "whatever"