я следующий код:Как я могу получить один и тот же код метода в подклассе без дублирования кода?
#include <exception>
class Exception : public std::exception {
private:
const char* MESSAGE = "Exception"
public:
inline virtual const char* what() const throw() {
return this->MESSAGE;
}
};
class ShoulderROMException : public Exception {
private:
typedef Exception super;
const char* MESSAGE = "ShoulderROM exception";
protected:
static const int MAX_MESSAGE_LENGTH = 200;
mutable char composedMessage[ShoulderROMException::MAX_MESSAGE_LENGTH];
public:
virtual const char* what() const throw() {
strcpy(this->composedMessage, super::what());
strcat(this->composedMessage, " -> ");
strcat(this->composedMessage, this->MESSAGE);
return this->composedMessage;
}
};
class KinectInitFailedException : public ShoulderROMException {
private:
typedef ShoulderROMException super;
const char* MESSAGE = "Kinect initialization failed."
public:
virtual const char* what() const throw() {
strcpy(this->composedMessage, super::what());
strcat(this->composedMessage, " -> ");
strcat(this->composedMessage, this->MESSAGE);
return this->composedMessage;
}
};
Это приводит к записи в журнале вид: Exception -> ShoulderROM exception -> Kinect initialization failed.
Это именно то, что я хочу, но я хотел бы избежать очевидного дублирования кода и не могу показаться, чтобы найти (n элегантный) способ сделать это.
Было бы очень приятно, если бы кто-то мог помочь мне здесь. :)
С наилучшими пожеланиями, Лило
Вызывающие 'какое' несколько раз будет в настоящее время не в состоянии странным образом. Рассматривали ли вы использование вложенных исключений? Используете ли вы массивы символов вместо строк из-за безопасности исключений и выделения памяти? – dyp
Вы уже рассмотрели [boost.exceptions] (http://www.boost.org/doc/libs/1_59_0/libs/exception/doc/tutorial_diagnostic_information.html)? – dyp
Да, я считаю, что повышение и несколько связанных с проектом причин не позволяют мне использовать его. Плюс я не являюсь огромным другом форсирования. Я не использую строки, потому что 'std :: exception' заставляет тип' char * '. – Lilo