#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;
}