我有一个功能模板,它从图像中提取数据并将其复制到较小的数组(我称之为Patch
),模板函数称为copyPatch
。它被定义为:
template <class DestType, class SrcType, class Transformation>
bool copyPatch(Patch<DestType> &patch,
ImageData<SrcType>* src_data,
size_t src_ul_pix,
size_t src_ul_line)
注意:Transformation
参数允许我传入一个对数据执行某些转换的类。我将模板函数调用如下,
copyPatch<float, uint8_t, StraightCopy>(m_patch_data, m_data.t8u,
ul_pix, ul_line)
其中m_patch_data
的类型为Patch<float>
,而m_data.t8u
是联合的成员,其定义如下:
union {
ImageData<uint8_t>* t8u;
ImageData<uint16_t>* t16u;
ImageData<int16_t>* t16s;
ImageData<uint32_t>* t32u;
ImageData<int32_t>* t32s;
// A bunch more of these
void* tvoid;
} m_data;
当我编译它时,我得到以下错误(我已经修改了一下):
error: no matching function for call to:
copyPatch(Patch<float>&, ImageData<unsigned char>*&, size_t&, size_t&)’
copyPatch<float, uint8_t, StraightCopy>( m_patch_data, m_data.t8u, ul_pix, ul_line);
^
note: candidate is:
template<class DestType, class SrcType, class Transformation>
bool copyPatch(Patch<T>&, ImageData<SrcType>*, size_t, size_t)
template argument deduction/substitution failed:
对我来说,我不明白为什么功能不匹配。我能看到的唯一可能的原因是,对于第二个参数,它需要一个指针(这是我认为我正在传递的),但调用代码似乎是传递对指针的引用。
编译器是g ++ 4.8.1。
正如评论中所指出的那样,我的转型(StraightCopy)的问题可能定义如下:
template<class Dest, class Src>
class StraightCopy {
public:
Dest operator()(Src s) { return static_cast<Dest>(s); }
};
我错过了将参数传递给我的StraightCopy类。
答案 0 :(得分:0)
感谢PlasmaHH让我指向正确的方向。我的转换类型(StraightCopy)需要参数。所以我的电话看起来像是:
copyPatch<float, uint8_t, StraightCopy< float, uint8_t > >( m_patch_data, m_data.t8u, ul_pix, ul_line);
不是那么漂亮:o)