Использование класса с явным оператором 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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