Как отлаживать аргументы шаблона во время компиляции? - PullRequest
4 голосов
/ 07 сентября 2011

У меня есть кусок кода, который в значительной степени сокращается до:

template<class T> struct MyStruct;  // No definition by default
template<class T> struct MyStruct<T *> { ... };  // Specialization for pointers

Теперь где-то в моем коде, я получаю экземпляр MyStruct<T>, который оказывается неопределенным (без C ++ 0x / 011, без Boost ... ничего необычного, просто C ++ 03):

error C2027: use of undefined type 'MyStruct<T>'

Проблема в том, что я понятия не имею , где это вызывается , потому что код, который выполняет создание экземпляра, сам является шаблоном и вызывается из множества мест с разными аргументами. .

Есть ли способ как-то выяснить, что такое T во время компиляции, чтобы я мог лучше понять сообщения об ошибках?

(Извините, я забыл упомянуть: Visual Studio 2008.)

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

Я полагаю, что вы используете MSVC ++, если так, то посмотрите окно вывода, в нем может быть напечатано больше информации, особенно номер строки и имя файла.Как только вы узнаете номер файла и строки, вы можете начать отсюда.

Окно вывода обычно печатает все, например, как и с какими аргументами шаблона создается экземпляр шаблона.Все шаг за шагом.Эти сообщения очень полезны при отладке.

Как вы обнаружили, включение / WL выводит более подробные сообщения в окне вывода.

0 голосов
/ 07 сентября 2011

Я знаю, что вы сказали, что нет C ++ 11, но вы можете рассмотреть это, поскольку код C ++ 03 обратно совместим во всех компиляторах, совместимых с C ++ 11, чтобы использовать функцию static_assert C ++ 11 для отладки вашего кода ... если вам необходимо выполнить окончательную компиляцию с помощью компилятора C ++ 03, то вы всегда можете создать #define и использовать макросы препроцессора #ifdef и #endif, чтобы убедиться, что Функция static_assert не вызывает проблем в более ранних компиляторах, которые не поддерживают функции C ++ 11.

См. документы MSDN здесь для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...