次のようなオブジェクトがあります
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版にも問題なく入ります。
しかし、実行バージョンを試すと、コンパイラがヘッダーのテンプレート実装のみをコンパイルするように、テンプレートのみに入ります。
これを防ぐにはどうすればよいですか?これを削除して、2 つの異なるメソッドを作成しますか? テンプレートは気に入っていますが、これらのハイゼンベルクのバグはイライラさせられます。
ご意見ありがとうございます。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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はそのままです。