Как вывести числовую константу времени компиляции во время компиляции в Visual C++?
Visual C++ имеет #pragma message
что выводит строку в вывод компилятора. Теперь у меня есть фабрика:
template<class Type>
CComPtr<Type> CreateComObject()
{
CComPtr<Type> newObject( new CComObject<Type> );
//do some tuning to the object
return newObject;
}
и я хочу вывести размер класса, который передается в new
(а именно sizeof( CComObject<Type> )
В вывод компилятора. Похоже на #pragma message
принимает только строки.
как я могу вывести числовую константу времени компиляции?
1 ответов
Если я правильно понял ваш вопрос, то, я думаю, можно сделать так:
template<size_t size>
struct overflow{ operator char() { return size + 256; } }; //always overflow
//if you doubt, you can use UCHAR_MAX +1 instead of 256, to ensure overflow.
template<class Type>
CComPtr<Type> CreateComObject()
{
CComPtr<Type> newObject( new CComObject<Type> );
char(overflow<sizeof(CComObject<Type>)>());
return newObject;
}
значение sizeof(CComObject<Type>)
будет печататься как предупреждающие сообщения во время компиляции.
см. эту небольшую демонстрацию:http://www.ideone.com/Diiqy
посмотрите на эти сообщения (из приведенной выше ссылки):
prog.cpp: в функции-члене 'overflow:: оператор char () [с unsigned int размер = 4u]’:
еда.ЧГК: в функция-член 'overflow:: оператор char () [с unsigned int размер = 12u]’:
еда.СРР: В функции-члене 'overflow:: оператор char () [с unsigned int размер = 400u]’:
в Visual Studio, вы можете увидеть эти сообщения в Вывод tab; он может не отображаться в Список Ошибок > Предупреждения tab.
идея взята из моего другого решение: