C ++重载函数指针

时间:2010-07-27 03:18:35

标签: c++ templates

我无法让它发挥作用:

template<class Input, class Output, class Index>
size_t pack(void (*copy)(Input, Input, Output),
            size_t N, Input input, Output output,
            const Index &index);

size_t K = pack(&std::copy<const double*,double*>,
                M, C.data().begin(), C_.data().begin(),
                index.host);

我得到的编译器消息告诉我副本没有解决,而是我得到了 unresolved overloaded function type>

我做错了什么? 谢谢

2 个答案:

答案 0 :(得分:2)

好吧,我错过了输出迭代器类型的std :: copy的返回类型。

正确的代码:

template<class Input, class Output, class Index>
size_t pack(Output (*copy)(Input, Input, Output),
            size_t N, Input input, Output output,
            const Index &index);

答案 1 :(得分:1)

您可以进行设计更改。一个可能是使返回类型成为单独的模板参数:

template<class R, class Input, class Output, class Index>
size_t pack(R (*copy)(Input, Input, Output),
            size_t N, Input input, Output output,
            const Index &index);

推导出返回类型(并随后被代码忽略)。我建议的另一个选项是接受任何通用函数类型:

template<class CopyFunc, class Input, class Output, class Index>
size_t pack(CopyFunc func,
            size_t N, Input input, Output output,
            const Index &index);

这不会强制执行任何特定签名,并提供最大的灵活性。