Привет всем, Помогите с выбором архитектуры. Использовать исключения или нет, какие есть аргументы за 1 решиение и за 2-е. Скажеться ли использование исключений на производительности?
Решение 1, с пробросом и обработкой исключений. Кажется код проще поддерживать, при этом:
class A {
public:
std::mutex statusMutex;
int status;
std::string error;
int getStatus() {
std::unique_lock<std::mutex> lock(statusMutex);
return status;
}
std::string getError() {
std::unique_lock<std::mutex> lock(statusMutex);
return error;
}
bool doX() {
try {
step1();
// step2();
// step3(); ...
return true;
} catch (const std::exception & e) {
std::unique_lock<std::mutex> lock(statusMutex);
status = -1;
error = e.what();
return false;
}
}
void step1(){
// ...
// There has been a breakdown
throw std::runtime_error ("step1 err");
}
};
решение 2, без исключений, в плане работы на кодом кажеться не очень удобным из-за if
class A {
public:
std::mutex statusMutex;
int status;
std::string error;
int getStatus() {
std::unique_lock<std::mutex> lock(statusMutex);
return status;
}
std::string getError() {
std::unique_lock<std::mutex> lock(statusMutex);
return error;
}
bool doX() {
step1();
if (status == -1) return false;
// step2();
// if (status == -1) return false;
// step3();
// if (status == -1) return false;
// ...
return true;
}
void step1(){
// ...
// There has been a breakdown
std::unique_lock<std::mutex> lock(statusMutex);
status = -1;
error = "step1 err";
}
};
int main() {
A a;
std::future<bool> the_a_result = std::async(&A::doX, &a);
std::cout << "the_a_result = " << the_a_result.get()
<< ", a.status = " << a.getStatus()
<< ", a.error = '" << a.getError() << "'"
<< std::endl;
return 0;
}