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