Ho il seguente metodo all'interno di un file di intestazione chiamato 'filter.h':C++ non può chiamare il metodo (con template) da dentro il metodo basato su modelli
namespace std{
//some code
template <class T, class S, class BorderMethod>
tImage<T> binomial(const tImage<T> &in, const size_t k = 3) {
//do some computations
tImage<T> img = in.convolve<T, BorderMethod>(in, kernel);
return img;
}
}
prima cosa che ho notato: la definizione di questo metodo ha luogo all'interno del file di intestazione. È quella procedura standard?
Ora, il problema reale: la chiamata al metodo convolve
non funziona, anche se in
possiede tale metodo. Ecco la definizione del metodo convolve
all'interno della classe tImage<T>
:
tImage<T> convolve(const gravis::tImage<T>& image, const gravis::tArray<typename tImageTraits<T>::Float_t>& kernel);
Come devo chiamare questa funzione?
'in' è l'argomento' const', quindi una funzione membro non-'const' non può essere invocata su di essa. – hmjd
'binomiale' sembra pensare che' convolve' sia un modello di funzione, ma 'convolve' non assomiglia a un modello di funzione (solo una funzione membro di una classe template). – aschepler
Perché il tuo codice è in 'namespace std'? È illegale aggiungere al namespace 'std' (oltre alle specializzazioni). – Praetorian