2
通过this blog有所启发,我想我会尝试在C上创建一个广义函数子类++。我不会出去很多。我用它作为正确理解模板的借口,而不仅仅是讨论。的std ::功能模板的模板参数
#include <functional>
template<template <typename> typename F_, typename A>
struct Functor {
template<typename B>
static F_<B> fmap
(std::function<B(A)>
, F_<A>
);
};
template<typename A>
struct Functor<std::function, A(void)> {};
template<typename A>
template<typename B>
std::function<B()> Functor<std::function, A(void)>::fmap
(std::function<B(A)> f
, std::function<A()> fA
){
return [&](){
return f (fA());
};
};
经过相当多的混乱之后,我很难过。我有编译器错误
error: no ‘std::function<B()> Functor<std::function, A()>::fmap(std::function<B(A)>, std::function<A()>)’ member function declared in class ‘Functor<std::function, A()>’
我迷路了。坦率地说,我虽然已经宣布了这一点。有什么建议么?我正在编译使用最新的编译器,使用C++ 17的gcc 7.2。我认为C++ 14是所有需要的。
顺便说一句,我可以很愉快地编译FMAP
的非普通版template<typename A, typename B>
std::function<B(void)> fmap1
(std::function<B(A)> f
, std::function<A(void)> fA
)
{
return [&](){
return f (fA());
};
};
谢谢。我在模板中生锈了一点。这完全是工作 – OllieB
@OllieB - 你的意思是问题吗?请不要。它会使我的答案失效。如果你有一个问题,请问(如在后)一个新问题。 – StoryTeller
对不起,是的。你的回答不包括任何代码,当我评论 – OllieB