bool bGood = false;
auto result = doSomething( &bGood );
if (bGood && /* тут надо преобразовать result в новую переменную нового типа, ну и ещё может проверок и преобразований */ )
{
// ещё я хочу проверить result на empty() и если не empty, то вызвать конверсию в новый тип, и ещё раз проверить на валидность, и потом полученное использовать внутри if'а
// Можно конечно наплодить if'ов и переменных до собсно блока, который обрабатывает данные, но хочется красиво
// Do something with var
}
Курить доки что-то лень Может кто побыстрому подскажет, а?
S>bool bGood = false, var;
S>if(auto result = doSomething( &bGood ); bGood && !result.empty() && (var = static_cast<bool>(result)) ) {
S> // Do something with var
S>}
S>
S>Это вроде C++17 стандарт
Вроде смог сформулировать в коде, но в один if не понял как затолкать всё:
QDateTime dtLastDate;
bool bOk = false;
auto executedQuery = pDbMan->execHelper( selectLastDateQueryText, &bOk );
if (bOk)
{
auto resVec = pDbMan->selectFirstResultToSingleStringVector(executedQuery);
if (resVec.empty())
{
// Ну нет, так нет
}
else
{
dtLastDate = dateTimeFromDbString( resVec.front() );
}
}
if (dtLastDate.isNull() || !dtLastDate.isValid())
{
// пытаемся получить dtLastDate ещё как-то
}
if (dtLastDate.isNull() || !dtLastDate.isValid())
{
// Вот тут уже мы поняли точно, что всё пошло не такcontinue;
}
// Ду Гуд Жоб Хере
Мне это всё не нравится а) чисто эстетически, б) потом это всё разрастётся в ветвистое говно
M>Вроде смог сформулировать в коде, но в один if не понял как затолкать всё:
я бы делал обертки, возвращающие std::pair из самого результата и флага bool или даже std::optional
// тут я не в курсе, что там за типы
std::optional<QUERY_RES_TYPE> execHelperWrapper( DB_MGR *db, const QString& query )
{
bool ok = false;
auto qr = db->execHelper( query, &ok );
return ok ? qr : std::nullopt;
}
std::optional<QString> selectFirstFieldOfFirstRowAsString( DB_MGR *db, const QString& query )
{
auto qr = execHelperWrapper( db, query );
if ( !qr )
return std::nullopt;
auto resVec = db->selectFirstResultToSingleStringVector( qr.value() );
return !resVec.empty() ? resVec.front() : std::nullopt;
}
QDateTime dateTimeFromDbStringWrapper( std::optional<QString> s )
{
QDateTime res;
if ( s )
res = dateTimeFromDbString( s.value() );
return res;
}
и тогда получается
QDateTime dtLastDate = dateTimeFromDbStringWrapper( selectFirstFieldOfFirstRowAsString( pDbMan, selectLastDateQueryText ) );
if (dtLastDate.isNull() || !dtLastDate.isValid())
{
// пытаемся получить dtLastDate ещё как-то
}
if (dtLastDate.isNull() || !dtLastDate.isValid())
{
// Вот тут уже мы поняли точно, что всё пошло не такcontinue;
}
// Ду Гуд Жоб Хере
Re[4]: Подскажите побыстрому - объявить переменную в if как?