J'ai un objet comme ce qui suitModèle version d'exécution différent de débogage
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);
}
};
Et dans mon RPC, je donne les résultats suivants:
#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);
}
Ces deux parcours de mise en œuvre sans aucun problème dans mon code de débogage . Il entre dans la version int16_t sans problème et la version Ipp32f aussi sans problème. Mais quand j'essaie la version Run, elle ne fait que entrer dans le Template, comme le compilateur compile uniquement l'implémentation du Template dans l'en-tête.
Comment puis-je éviter que cela n'arrive? Dois-je supprimer cela et juste créer deux méthodes différentes? J'adore mes modèles mais ces bogues de Heisenberg sont trépidants.
Merci pour toute contribution.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Andy Prowl a répondu à cette question et il est résolu faire ce qui suit dans l'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);
Et maintenant, il travaille dans l'exécution aussi bien. Le RPC reste le même.
Un petit conseil: Si vous ne voulez pas les avertissements "argument non utilisé", déclarez simplement le type mais pas le nom. Comme 'void runFFT (T *, float const &)' –
'AnalyzerClient' est-il une sous-classe de' Client'? –
En ce qui concerne votre problème, un débogueur efface normalement toutes les variables, même les variables locales. Cela signifie que vous pourriez avoir une vérification 'NULL' qui réussit dans le débogueur mais échoue lorsque vous ne courez pas dans le débogueur. Pour résoudre ce problème, assurez-vous d'initialiser correctement toutes les variables, par exemple en réglant les pointeurs sur '0' (ou' NULL' ou 'nullptr'). –