我需要获取当前类的名称以进行日志记录。这是这里的建议
void MyNS::CMyClassImpl::Test() {
std::cout << typeid(*this).name();
}
问题是对于班级
namespace MyNS {
class ATL_NO_VTABLE CMyClassImpl :
public ATL::CComObjectRoot,
public ATL::CComCoClass<CMyClassImpl, &CLSID_CoMyClass>,
public ATL::IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_rsMyLib, 1, 0>,
public CComISupportErrorInfoImpl<&IID_IMyClass>
{
void Test();
}
}
我得到一个字符串
class ATL::CComObject<class MyNS::CMyClassImpl>
两个问题:
- 为什么?
- 我想得到,
CMyClassImpl
或者至少MyNS::CMyClassImpl
,然后设置解析器。
这一切都适用于 Visual Studio
更新
__PRETTY_FUNCTION__
VS中没有宏。并__FUNCTION__
返回MyNS::CMyClassImpl::MyMethod
。如果没有其他选择,那么我将使用它
typeid(*this)
返回不是当前类型的 id,而是层次结构的最终类的 id(创建了一个实例)。ATL 不能直接实例化 CMyClassImpl 类,因为它是一个抽象类。相反,它创建了一个ATL::CComObject<CMyClassImpl>
,它定义了缺少的抽象函数。如果您需要找出它
*this
在当前上下文中的类型,请编写typeid(decltype(*this))
. (删除_c_v,添加口味。)结果是这样的