Сообщение Re[3]: Создать переменную со скопом для if от 10.04.2018 20:08
Изменено 10.04.2018 20:29 Marty
Re[3]: Создать переменную со скопом для if
Здравствуйте, Marty, Вы писали:
Хотя, дошло. Нужно было лишь немного подумать, и получилось
Остался вопрос — смутно помню, почему-то в подобных случаях рекомендовалось перегружать и operator void* (или вместо operator bool, или совместно с ним). Не напомните, в чем там хитрость, если вообще есть?
Код:
Надо еще на C++11 проверить, работает ли.
Хотя, дошло. Нужно было лишь немного подумать, и получилось
Остался вопрос — смутно помню, почему-то в подобных случаях рекомендовалось перегружать и operator void* (или вместо operator bool, или совместно с ним). Не напомните, в чем там хитрость, если вообще есть?
Код:
#include <iostream>
using namespace std;
struct A
{
bool bValid;
int value;
bool isValid() { return bValid; }
A(bool b = false) : bValid(b) {}
A(int v) : bValid(true), value(v) {}
operator bool() const
{
return bValid;
}
};
A foo()
{
return 5;
}
A bar()
{
return false;
}
int main() {
if (auto a = foo())
{
cout<<"a = "<<a.value<<"\n";
}
else
{
cout<<"a is not valid\n";
}
if (auto b = bar())
{
cout<<"b = "<<b.value<<"\n";
}
else
{
cout<<"b is not valid\n";
}
return 0;
}
Надо еще на C++11 проверить, работает ли.
Re[3]: Создать переменную со скопом для if
Здравствуйте, Marty, Вы писали:
Хотя, дошло. Нужно было лишь немного подумать, и получилось
Остался вопрос — смутно помню, почему-то в подобных случаях рекомендовалось перегружать и operator void* (или вместо operator bool, или совместно с ним). Не напомните, в чем там хитрость, если вообще есть?
Код:
Надо еще на C++11 проверить, работает ли.
Хотя, дошло. Нужно было лишь немного подумать, и получилось
Остался вопрос — смутно помню, почему-то в подобных случаях рекомендовалось перегружать и operator void* (или вместо operator bool, или совместно с ним). Не напомните, в чем там хитрость, если вообще есть?
Код:
#include <iostream>
using namespace std;
struct A
{
bool bValid;
int value;
bool isValid() { return bValid; }
A(bool b = false) : bValid(b) {}
A(int v) : bValid(true), value(v) {}
operator bool() const
{
return bValid;
}
};
A foo()
{
return 5;
}
A bar()
{
return false;
}
int main() {
if (auto a = foo())
{
cout<<"a = "<<a.value<<"\n";
}
else
{
cout<<"a is not valid\n";
}
if (auto b = bar())
{
cout<<"b = "<<b.value<<"\n";
}
else
{
cout<<"b is not valid\n";
}
return 0;
}
Надо еще на C++11 проверить, работает ли.