【发布时间】:2013-03-07 09:15:41
【问题描述】:
我在名为“filter.h”的头文件中有以下方法:
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;
}
}
我注意到的第一件事:这个方法的定义发生在头文件中。这是标准程序吗?
现在,实际问题是:调用convolve 方法将不起作用,即使in 确实拥有这样的方法。这是tImage<T>类中方法convolve的定义:
tImage<T> convolve(const gravis::tImage<T>& image, const gravis::tArray<typename tImageTraits<T>::Float_t>& kernel);
我该如何调用这个函数?
【问题讨论】:
-
in是const参数,因此不能在其上调用非const成员函数。 -
binomial似乎认为convolve是函数模板,但convolve看起来不像函数模板(只是模板类的成员函数)。 -
为什么你的代码在
namespace std?添加到std命名空间(除了特化)是非法的。