В коде есть немного СУХОГО, которое я и другие написали, что я хотел бы уменьшить, но я не могу понять, как это сделать. Это устаревший код 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?