开发者

C++ overloaded function pointer

开发者 https://www.devze.com 2023-01-09 04:20 出处:网络
I am not able to get this to work: template<class Input, class Output, class Inde开发者_高级运维x>

I am not able to get this to work:

template<class Input, class Output, class Inde开发者_高级运维x>
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);

compiler message I get tells me that copy is not resolved, instead I get unresolved overloaded function type>.

what am I doing wrong? thank you


well, I missed return type of std::copy which is output iterator type.

Correct code :

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


You could make a design change. One might be make the return type a separate template parameter:

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

The return type is deduced (and subsequently ignored by your code.) The other option, which I would recommend, would be to accept any generic function type:

template<class CopyFunc, class Input, class Output, class Index>
size_t pack(CopyFunc func,
            size_t N, Input input, Output output,
            const Index &index);

This doesn't enforce any specific signature, and provides the most flexibility.

0

精彩评论

暂无评论...
验证码 换一张
取 消