我有一个像下面这样的对象
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版本也没有问题。
但是当我尝试运行版本时,它只输入模板,就像编译器只编译头文件中的模板实现一样。
我该如何防止这种情况发生?我应该删除它并创建两种不同的方法吗?我喜欢我的模板,但这些 Heisenberg 错误令人沮丧。
感谢您的任何意见。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Andy Prowl 回答了这个问题,并在 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 保持不变。