C ++ исключения для большого проекта

В настоящее время я создаю игровой движок C ++ в качестве учебного упражнения и включаю исключения в менее критичные для производительности разделы. Я в основном разработчик PHP и Ruby, поэтому я привык регулярно объявлять новые классы исключений, используя простой синтаксис, подобный следующему:

class SomeSubSystemException < Exception; end

или же

class SomeSubSystemException extends Exception {};

Есть ли простой синтаксис для этого в C ++, или я собираюсь обработать исключения неправильным способом для проектов C ++? В настоящее время я должен сделать следующее для каждого класса исключений, что заставляет меня хотеть не определять очень много:

class SubSystemException : public MainException {
SubSystemException(std::string& msg) : MainException(msg) {}
};

Заранее спасибо!

2

Решение

Определите макрос, который сделает это за вас.

#define NEW_EXC(Derived, Base) class Derived : Base {\
Derived(const std::string& msg) : Base(msg) {}

NEW_EXC(SubSystemException, MainException);

#undef NEW_EXC

Готово.

Остерегайтесь макросов, которые могут быть злыми.

3

Другие решения

Хотя я согласен с комментарием Бо Перса, в котором говорится, что это не будет вашим основным источником boilaerplate, вот еще один способ этого:

использование CRTP

template<class T>
class MainException : public std::runtime_error{
private:
MainException(std::string const& msg):std::runtime_error(msg){ }
public:
static MainException<T> create(std::string const& msg){
return MainException<T>(msg);
}
};

//Usage:
class MyException : public MainException<MyException> {};
void foo(){
MyException::create(std::string("Foo"));
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector