У меня есть объект, как следующийШаблон Run версия В отличие от Debug
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 также без проблем.
Но когда я пытаюсь запустить версию, она входит только в шаблон, как только компилятор компилирует реализацию шаблона в заголовке.
Как предотвратить это? Удалить это и просто создать два разных метода? Мне нравятся мои шаблоны, но эти ошибки Гейзенберга удручающие.
Спасибо за любой ввод.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Энди Проул ответил на этот вопрос, и решается в ГЭС:
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 &)' –
Является ли 'AnalyzerClient' подклассом' Client'? –
Что касается вашей проблемы, отладчик обычно очищает все переменные, даже локальные переменные. Это означает, что у вас может быть проверка «NULL», которая преуспевает в отладчике, но не выполняется, когда вы не запускаете в отладчике. Чтобы решить эту проблему, убедитесь, что вы правильно инициализировали все переменные, например указатели указателей на '0' (или' NULL' или 'nullptr'). –