不同我有一個像下面模板運行的版本,從調試
template<typename T>
inline void UnusedParameter(T const&)
{
}
class Client
{
public:
template<class T>
void runFFT(T *wSamples, float const &fMult)
{
std::cout << "INSIDE RUNFFT : : :" << std::endl;
UnusedParameter(wSamples);
UnusedParameter(fMult);
}
};
在我CPP的對象,我有以下:
#include "object.hpp"
template<>
void Client::runFFT<int16_t>(int16_t *wSamples, float const &fMult)
{
std::cout << "INSIDE INT16_T version: : :" << std::endl;
UnusedParameter(wSamples);
UnusedParameter(fMult);
}
template<>
void Client::runFFT<Ipp32f>(Ipp32f *wSamples, float const &fMult)
{
std::cout << "INSIDE IPP32F version: : :" << std::endl;
UnusedParameter(wSamples);
UnusedParameter(fMult);
}
這兩種實現上運行,而不在我的調試代碼中的任何問題。它進入int16_t版本沒有問題,Ipp32f版本也沒有問題。
但是,當我嘗試運行版本,它只進入模板,就像編譯器只編譯標題中的模板實現。
如何防止發生這種情況?我應該刪除這個,只是創建兩種不同的方法?我喜歡我的模板,但這些海森堡錯誤令人沮喪。
感謝您的任何意見。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
安迪警車回答了這個問題,並就解決了在HPP中執行以下操作:
template<typename T>
inline void UnusedParameter(T const&)
{
}
class Client
{
public:
template<class T>
void runFFT(T *, float const &)
{
// Thanks for Joachim for removing my Unused Parameter crap
std::cout << "INSIDE RUNFFT : : :" << std::endl;
}
};
template<>
void Client::runFFT<int16_t>(int16_t *wSamples, float const &fMult);
template<>
void Client::runFFT<Ipp32f>(Ipp32f *wSamples, float const &fMult);
現在它在運行時也起作用。 CPP保持不變。
一個小提示:如果你不想要「未使用的參數」警告,只聲明類型而不是名稱。像'void runFFT(T *,float const&)' – 2013-04-08 17:45:02
'AnalyzerClient'是'Client'的子類嗎? – 2013-04-08 17:46:03
至於你的問題,調試器通常會清除所有變量,甚至局部變量。這意味着你可能有一個'NULL'檢查在調試器中成功,但是當你沒有在調試器中運行時會失敗。要解決這個問題,請確保正確初始化所有變量,例如設置指針爲'0'(或'NULL'或'nullptr')。 – 2013-04-08 17:47:59