2010-07-27 4 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

bummers, я нашел проблему, std :: copy возвращает output not void. Должен ли я удалить этот вопрос? – Anycorn

+0

Вы можете написать, затем принять свой собственный ответ. Лучше, чем удаление. –

ответ

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

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); 
Смежные вопросы