class A{
public:
A(): b(), c(), d(){}
private:
B b;
C c;
D d;
};
我有类似上面的代码。初始化列表比这里长的地方。在某些地方,对象的初始化出错了。我想找出它出错的地方;在什么对象之后以及在哪个对象的初始化中它失败了。
我不想将打印语句添加到相应的类中。
我想过有一种方法可以在构造函数中为我打印一行;这样我需要拥有与类A中的类变量数一样多的对象。没有段错误或抛出任何异常,我可以捕获。
除了让一个具有尽可能多的temp对象的类temp作为成员变量之外,还有其他方法可以调试这个。有没有聪明的方法来调试它。感谢。
答案 0 :(得分:0)
#include <exception>
#include <string>
#include <typeinfo>
#include <iostream>
struct B
{
};
struct C
{
};
struct D
{
};
struct YourExceptionType:std::exception
{ std::string m_s;
YourExceptionType(const std::string &_r)
:m_s(_r)
{
}
~YourExceptionType(void) throw()
{
}
const char *what(void) const throw()
{ return m_s.c_str();
}
};
struct Show
{ Show(const char *const _p)
{ std::cout << _p << std::endl;
}
};
template<typename A>
struct ShowMe:Show, A
{ ShowMe(void)
try:Show(typeid(A).name()),
A()
{
} catch (const std::exception &_r)
{ throw YourExceptionType(
(std::string("Failed constructor of type ")
+ typeid(A).name()
+ ":" + _r.what()).c_str());
}
};
class A{
public:
A(): b(), c(), d(){}
private:
ShowMe<B> b;
ShowMe<C> c;
ShowMe<D> d;
};