C++重载函数指针
问题描述:
我无法得到这个工作:C++重载函数指针
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>
。
我做错了什么? 谢谢
答
你可以做一个设计变更。一个可能使返回类型的单独的模板参数:(以及随后由代码忽略)
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);
这不强制任何特定的签名,并提供最大的灵活性。
+0
谢谢。第一个是我需要的。 – Anycorn 2010-07-27 04:14:16
答
好吧,我错过了输出迭代器类型的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);
坏人,我发现问题,std :: copy返回输出不是void。 我应该删除这个问题吗? – Anycorn 2010-07-27 03:27:22
你可以写,然后接受你自己的答案。好于deletin'。 – 2010-07-27 03:37:46