2
this blogに多少触発されていますが、私はC++で一般化されたFunctorクラスを作成しようと考えていました。私はあまり出かけることはありません。私はテンプレートを正しく理解するために言い訳として使っています。std :: functionをテンプレートテンプレートのパラメータとして
#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());
};
};
かなり混乱した後、私は困惑しています。私はコンパイラエラーを持っています
私は迷っています。率直に言って、私はこれを宣言しました。助言がありますか?私は最新のコンパイラgcc 7.2を使ってC++ 17を使ってコンパイルしています。私はC++ 14が必要だと思っています。
ところで、私は非常に喜んでFunctor
あなたが部分的に特化した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