gpt4 book ai didi

C++ 在你的类中使用 && 而没有 bool/&& 重载?

转载 作者:行者123 更新时间:2023-11-30 00:58:52 27 4
gpt4 key购买 nike

有人告诉我你实际上可以做 MyClass a, b; ... if (a && b) {...} 没有 1) 重载 && 运算符 2) 重载 bool 运算符(例如:class MyClass { ... operator bool(){return boolval ; } };)

解决方案是使用指向成员函数的指针。我不明白如何使用这个解决方案。我的笔记如下所示,但我无法得到更多。有谁知道如何做到这一点?

the function takes a private nested struct as a parameter. The reason is that that type can’t legally be converted into anything else – it can never be used in any expression other than a Boolean context

最佳答案

注意:通常回答 [homework] 问题不会立即给出解决方案。但是,根据您的问题,您已经知道解决方案但不理解。我会尝试解释。

根据您在问题中提供的信息,您的讲师可能在谈论 safe bool idiom 的一些变体:

class MyClass
{
private:
typedef void (MyClass::*SafeBoolType)() const;
void ThisTypeDoesNotSupportComparisons() const {}
public:
operator SafeBoolType() const {
// The actual conditional expression would go where "true" is.
// ____
// | |
return (true) ? &MyClass::ThisTypeDoesNotSupportComparisons : 0;
}
};

int main()
{
MyClass a;
MyClass b;

if(a && b) {} // Compiles.
/* if(a < b) {} */ // Doesn't compile.
}

在这里,我们提供了一个指向成员函数指针的类型转换运算符,它只能在 bool 上下文中使用。这允许 if带有逻辑运算符 ( && ) 的语句即使没有 bool 也可以编译类型转换或 &&运算符重载。它还可以防止 if来自编译的带有比较运算符 ( < ) 的语句。

但是,我不明白您的注释中提到“该函数将私有(private)嵌套结构作为参数”的部分。 safe bool 习语不要求成员函数采用未命名的 struct。 .我建议你问问你的导师;有可能我完全误解了这个问题。

关于C++ 在你的类中使用 && 而没有 bool/&& 重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5441248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com