C++ C++;重载函数指针
我无法让它工作:C++ C++;重载函数指针,c++,templates,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*,do
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);
模板
尺寸包(无效(*副本)(输入、输入、输出),
大小、输入、输出、,
常数指数和指数);
尺寸K=包装和标准::副本,
M、 C.data().begin(),C_u2;.data().begin(),
索引(主机);
我收到的编译器消息告诉我副本未解析,而是
未解析的重载函数类型>
我做错了什么?
谢谢你,我错过了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);
模板
包装尺寸(输出(*副本)(输入、输入、输出),
尺寸\u t N,输入输入,输出输出,
常数指数和指数);
您可以更改设计。一种可能是将返回类型设置为单独的模板参数:
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);
模板
包装尺寸(R(*份)(输入、输入、输出),
大小、输入、输出、,
常数指数和指数);
返回类型被推导(随后被代码忽略)。我建议的另一个选项是接受任何通用函数类型:
template<class CopyFunc, class Input, class Output, class Index>
size_t pack(CopyFunc func,
size_t N, Input input, Output output,
const Index &index);
模板
包装尺寸(复制功能),
大小、输入、输出、,
常数指数和指数);
这不会强制执行任何特定的签名,并提供了最大的灵活性。bummers,我发现了问题,std::copy返回的输出不是无效的。我应该删除这个问题吗?你可以写信然后接受你自己的答案。总比删除好。