我无法让它发挥作用:
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>
。
答案 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);
这不会强制执行任何特定签名,并提供最大的灵活性。