我有一个不可变的字符串类,它由一个指针返回(允许它为null)。
我想重载ImmutableString* == const char*
。然而,似乎我不能,因为左参数是一个指针,它必须是一个非指针。该函数确实处理比较null成员我不能重载它。
我可以使用什么指针包装器,所以我可以使用,所以我可以做我想要的重载?优选标准的。我怀疑我可以很容易地写自己的,但我的直觉说升压或者stl有一个。
答案 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_ptr
或std::shared_ptr
。
但是为什么要比较那样的两个指针呢?在我看来,正确的方法是实现ImmutableString::operator == (const char*)
并使用对象而不是指针。
ImmutableString* is = foo();
(*is) == "whatever"