不同我有一个像下面模板运行的版本,从调试
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