Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;重载函数指针_C++_Templates - Fatal编程技术网

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返回的输出不是无效的。我应该删除这个问题吗?你可以写信然后接受你自己的答案。总比删除好。