Использование класса с явным оператором Bool перегруженаC++

Программы на C++. Форум разработчиков
Anonymous
Использование класса с явным оператором Bool перегружена

Сообщение Anonymous »

У меня есть класс с внутренним логическим значением, которое кажется хорошим кандидатом для оператора перегрузки Bool , например:

Код: Выделить всё

class MyBool{
private:
bool value_ = false;

// Nice API and logic to set the interal value_ to true or false...

public:
explicit operator bool() const {
return value_;
};
};
from https://en.cppreference.com/w/cpp/langu ... conversion, «Контекстные преобразования», это работает в:

[*]. Operators! , && и || ;
[*] Первый операнд условного оператора ?: ;
[*] Предикат в STATIC_ASSERT Declaration;
[*] выражение в noExctement
[*] выражение
[*] выражение
. /> < /ul>
, что объясняет, почему я получаю ошибки при попытке использовать его другими способами, например: < /p>

Код: Выделить всё

MyBool x;
///...
bool y = x; // --> error: cannot convert ‘MyBool’ to ‘bool’ in initialization
// or:
bool z;
z = x;      // --> error: cannot convert ‘MyBool’ to ‘bool’ in assignment

// Or returning from a function:
bool func(...){
MyBool x;
// ...
return x; // --> error: cannot convert ‘MyBool’ to ‘bool’ in return
}

// Or in Gtests, like:
MyBool x;
// ...
EXPECT_TRUE(x); // --> error: no matching function for call to ‘testing::AssertionResult::AssertionResult(MyBool)’
Если я удалил явное ключевое слово, некоторые проблемы могут возникнуть из-за неявных конверсий (безопасная идиома Bool в pre C ++ 11: http://blog.asymptotic.co.uk/2014/03/th ... Diom-in-c/) mybool переменная для Bool, и она будет работать, но для меня это нездоровое использование видов побеждает цель перегрузки оператора, то есть для естественного использования mybool в качестве лопасти. Вместо этого я мог бы добавить функцию участника, как это: < /p>

Код: Выделить всё

bool get_value() const {
return value_;
}
и используйте x.get_value () каждый раз, когда мне нужно «поднять» в Bool, даже в условиях, петлях и т. Д. C ++ 11)?

Подробнее здесь: https://stackoverflow.com/questions/613 ... overloaded

Вернуться в «C++»