Действительно, как-то сумбурно написал.
Попробую по порядку.
В своей программе хочу записывать в лог сообщения об ошибках
и имя класса того объекта, в котором выброшено исключение.
Примерно так:
int main (int argc, char *argv[]) {
...
try {
SomeClass sc(-1);
}
catch (MyException &e) {
log << e.who() << " -> " << e.what();
throw;
}
...
}
Использовать класс MyException хочу так:
class SomeClass {
int _sm;
public:
SomeClass (int sm) {
if (sm >= 0) _sm = sm;
else throw MyException(*this, "sm must be positive");
}
...
};
Класс MyException, предназначенный для обработки специфичных
для моей программы ошибок, примерно таков:
class MyException {
? _obj;
string _msg;
public:
MyException (? obj, string msg): _obj(obj), _msg(msg) {}
string who () {
string s(typeid(_obj).name());
return s;
}
string what () {
return _msg;
}
};
Там, где знак вопроса и непонятно.
А по поводу закрытости имел в виду (недоимел :-) конструктор type_info.
Непосредственно имена классов передавать пробовал, но возникает
какое-то ощущение недоделанности.