簡體   English   中英

如何在編譯時調試模板參數?

[英]How to debug template arguments at compile-time?

我有一段代碼,幾乎減少到:

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.)

我相信你正在使用MSVC ++,如果是這樣,然后看到輸出窗口,它可能會打印更多信息,特別是行號和文件名。 一旦知道文件和行號,就可以從那里開始。

輸出窗口通常打印所有內容,例如如何以及使用什么模板參數,模板實例化。 一切都在循序漸進。 調試時這些消息非常有用。

正如您自己發現的那樣,啟用/ WL會在輸出窗口中打印更多詳細信息。

我知道你說沒有C ++ 11,但你可能要考慮,因為C ++ 03代碼在所有符合C ++ 11的編譯器中向后兼容,要使用C ++ 11的static_assert特性來調試你的代碼。 ..如果必須使用C ++ 03編譯器進行最終編譯,那么您始終可以創建#define並使用#ifdef#endif預處理器宏來確保static_assert功能不會導致早期出現問題不支持C ++ 11功能的編譯器。

有關詳細信息,請參閱此處MSDN文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM