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

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

Сообщение Anonymous »

контекст: < /strong> < /p>

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

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

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_;
};

};
из https://en.cppreference.com/w/cpp/langu ... conversion, «Контекстные конверсии», это работает в:


Оператор, встроенный в in the hy, while, для; && и ||; < /li>
Первый операнд условного оператора? это: < /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)’
Если я удалил ключевое слово eplicit , некоторые проблемы возникают из-за неявных преобразований (безопасная идиома Bool в pre C ++ 11: http://blog.asymptotic.co.uk/2014/03/th ... -c/mptotic. Я мог бы явно поднять переменную mybool в Bool, и это будет работать, но для меня это неоднородное использование вроде побеждает цель перегрузки оператора, то есть иметь возможность естественным образом использовать mybool в качестве була. Вместо этого я мог бы добавить функцию члена, подобную следующему: < /p>

bool get_value() const {
return value_;
}
< /code>

и используйте x.get_value () Каждый раз, когда мне нужно «поднимать» в Bool, даже в условиях, петлях и т. Д. efficit ключевое слово?
(предпочтительно в C ++ 11).

Подробнее здесь: https://stackoverflow.com/questions/613 ... overloaded
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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