C ++ перегруженный указатель на функцию - PullRequest
1 голос
/ 27 июля 2010

Я не могу заставить это работать:

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>.

что я делаю не так? спасибо

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

хорошо, я пропустил тип возврата 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);
1 голос
/ 27 июля 2010

Вы можете внести изменения в дизайн.Можно было бы сделать тип возвращаемого значения отдельным параметром шаблона:

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

Это не требует какой-либо конкретной подписи и обеспечивает большую гибкость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...