我正在使用MSVC 19,在编译以下代码时出错。有没有办法在consteval
函数中获取对象的type_info
和name
?
class CChTest
{
public:
static consteval const char* test()
{
const char* ChReturn = typeid(CChTest).name();
// ...
// ...
return ChReturn;
}
};
2条答案
按热度按时间jogvjijk1#
如果你想在编译时得到类名,目前还没有标准的解决方案。
Boost类型索引库在过去十年中做得非常好。它的头文件,你只需要包括包含头文件的
boost
目录就可以在你的项目中使用它。它建立在像
__PRETTY_FUNCTION__
,__FUNCTION__
and__func__
这样的宏之上。你可以直接使用这些宏,但是这取决于你的编译器,甚至是特定的编译器版本,类型名在字符串中的位置。所以最好让一个经过良好测试和维护的库来完成这项工作。azpvetkf2#
如果要在编译时计算类名,请声明一个包含预定义名称的
static
变量,如下所示:这意味着您必须自己维护类名。
为了使它能够继承,让每个派生类
override
方法,这意味着你需要使它成为virtual consteval
。