关于lambda
  • 板块学术版
  • 楼主cygnus_beta
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/15 15:49
  • 上次更新2023/10/27 11:32:56
查看原帖
关于lambda
452531
cygnus_beta楼主2022/9/15 15:49
#include<thread>
#include<functional>
#include<concepts>

namespace cygnus{
        class sender{};

        template<typename Sender>
        concept is_sender=std::derived_from<Sender,sender>;

        template<typename Value>
        class just_sender:public sender{
        private:
                Value value_;
        public:
                just_sender(const Value& v):value_(v){}

                Value execute(){return value_;}
        };

        template<typename Sender,typename Function>
        requires is_sender<Sender>
        class then_sender:public sender{
        private:
                Sender sender_;
                std::function<std::invoke_result_t<Function>(decltype(Sender::execute()))> function_;//错误点
        public:
                then_sender(const Sender& s,Function& f):sender_(s){
                        function_=[&f](decltype(Sender::execute()) v){return f(v);};
                }

                auto execute(){
                        return function_(sender_.execute());
                }
        };

        template<typename Value>
        auto just(Value&& v){
                return just_sender<Value>(v);
        }

        template<typename Sender,typename Function>
        requires is_sender<Sender>
        auto then(const Sender& s,Function&& f){
                return then_sender<Sender,Function>(s,f);
        }

        template<typename Sender>
        requires is_sender<Sender>
        auto sync_wait(const Sender& s){
                return s.execute();
        }
}

请问在类then_sender中,成员我应如何定义function_的类型?

以下是此类的具体应用:

#include<iostream>
#include"execution.hpp"
using namespace cygnus;

int main(){
        auto s=then(just(1),[](int a){return a/2.0;});

        return 0;
}
2022/9/15 15:49
加载中...