Исключения — не для нормальных ситуаций, когда произошла ошибка по вине пользователя.
AutoLibXl book(im::createXlsx());
bool isOk = book->load(aFname);
if (!isOk) {
// Turn “Unknown exception” to localized message
const char* errMsg = book->errorMessage();
if (strcmp(errMsg, "Unknown exception") == 0) {
throw WideException(loc::get("Error.CannotXlsx"));
} else {
throw WideException(str::u2w(errMsg));
}
}
QSqlDatabase im::openQdb(const im::QdbSettings::Conn& aSets)
{
QSqlDatabase r;
switch (aSets.type) {
case im::QdbType::ODBC:
r = QSqlDatabase::addDatabase("QODBC");
r.setConnectOptions("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3");
break;
case im::QdbType::MYSQL:
r = QSqlDatabase::addDatabase("QMYSQL");
r.setHostName(QString::fromStdWString(aSets.myHost));
r.setPort(aSets.myPort);
break;
default:
throw std::logic_error("Invalid SQL type, shouldn't happen normally");
}
r.setDatabaseName(QString::fromStdWString(aSets.dataset));
if (!r.open(QString::fromStdWString(aSets.userName),
QString::fromStdWString(aSets.password)))
throw WideException(Wprintf(loc::get("Error.DbCantOpen"))
(r.lastError().text()));
return r;
}
std::wstring customLibXlToWstring() {}
registerLocalizer(ECustomLibXl, customLibXlToWstring);
try {
// сделай что-то
} Q_CATCH_MB (this, loc::getQ("Error.HeadImport"))
std::wstring filterMyException(const std::exception& e)
{
if (!dynamic_cast<MyException*>(&e))
return std::wstring();
return loc::get("Error.MyException");
}
Вы своими тремя примерами подтвердили, что исключения - не для нормальных ситуаций.
Проверяемые исключения - это та ещё спорная вещь в джаве, не хотелось бы углубляться в это.
у меня просто нет одного корня, куда прилетает всё со всей программы.