2010-07-27 128 views
1

我无法得到这个工作: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>

我做错了什么? 谢谢

+1

坏人,我发现问题,std :: copy返回输出不是void。 我应该删除这个问题吗? – Anycorn 2010-07-27 03:27:22

+0

你可以写,然后接受你自己的答案。好于deletin'。 – 2010-07-27 03:37:46

回答

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); 

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

+0

谢谢。第一个是我需要的。 – Anycorn 2010-07-27 04:14:16

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);