gpt4 book ai didi

c++ - 将模板化参数类型转换为字符串

转载 作者:行者123 更新时间:2023-11-30 04:39:05 38 4
gpt4 key购买 nike

我和其他人编写的代码中出现了一点 DRY,我想减少,但我没能弄清楚如何完成它。这是遗留的 COM 代码,但它干扰了可读性。我想执行以下操作:

bool queryInterface<class T, class V>(T &_input, V &_output, Logger &_logger){
if( FAILED( _input->QueryInterface( &_output ) ) ){
_logger.error() << "Failed to Query Interface between " << MAGICHAPPENS<T>()
<< " and " << MAGICHAPPENS<V>();

return false;
}
if( _output == NULL ){
_logger.warn() << "Unable to Query Interface between " << MAGICHAPPENS<T>()
<< " and " << MAGICHAPPENS<V>();

return false;
}
}

其中“MAGICHAPPENS()”函数会吐出变量类型的名称。这样一来,如果“V”是一个 IQueryFilter,我会返回一个字符串“IQueryFilter”。我想不出任何合理的解决方案,而不必编写一堆模板特化,一开始就完全打败了这一点。

有没有办法写ANDMAGICHAPPENS?

最佳答案

您可以使用 RTTI 获取变量名称:

#include <typeinfo>

template <typename T>
const char* type_name(void)
{
// this, unfortunately, is implementation defined
// and is allowed to be an empty string (useless!)
return typeid(T).name();
}

_logger.error() << "Failed to Query Interface between " << type_name<T>()
<< " and " << type_name<V>();

正如评论所说,name() 不能保证是名称的任何特定格式,或者根本不是任何名称。但它确实需要 RTTI,有些人不喜欢。

关于c++ - 将模板化参数类型转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610890/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com