C ++错误:没有用于调用函数模板的匹配函数

时间:2014-01-24 21:52:20

标签: c++ templates

我有一个功能模板,它从图像中提取数据并将其复制到较小的数组(我称之为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类。

1 个答案:

答案 0 :(得分:0)

感谢PlasmaHH让我指向正确的方向。我的转换类型(StraightCopy)需要参数。所以我的电话看起来像是:

copyPatch<float, uint8_t, StraightCopy< float, uint8_t > >( m_patch_data, m_data.t8u, ul_pix, ul_line);

不是那么漂亮:o)