C++返回类型扣除失败
C++ Returning Type Deduction Failing
fmap 函数上的返回类型不会自动推断为正确的选项
谁能帮忙?
#include <iostream>
#include <memory>
template<class T>
class Option{
public:
Option() : value_(nullptr){
}
Option(T const& value) : value_(std::move(value)){
}
Option(T&& value) : value_(std::make_shared<T>(std::move(value))){
}
Option(Option const&) = default;
Option(Option&&) = default;
Option& operator = (Option const&) = default;
Option& operator = (Option&&) = default;
template<class U>
auto fmap(std::function<U ( T const& ) > func) -> Option<decltype( func(std::declval<T>() ) )>{
return Option<U>(func(*value_));
}
template<class U>
Option<U> operator >>= (std::function<Option<U> ( T const& ) > func){
if(value_ == nullptr)
return Option<U>();
return func(value_);
}
static Option<T> Unit(T const& value){
return Option<T>(value);
}
static Option<T> Unit(T&& value){
return Option<T>(std::move(value));
}
private:
std::shared_ptr<T> value_;
};
int main(int argc, const char * argv[])
{
Option<int> o(55);
auto f = [](int const& i){
return i + 1;
};
auto result = o.fmap<int>(f);
return 0;
}
#include <iostream>
#include <memory>
template<class T>
class Option{
public:
Option() : value_(nullptr){
}
Option(T const& value) : value_(std::move(value)){
}
Option(T&& value) : value_(std::make_shared<T>(std::move(value))){
}
Option(Option const&) = default;
Option(Option&&) = default;
Option& operator = (Option const&) = default;
Option& operator = (Option&&) = default;
template<class Function>
auto fmap(Function func) -> Option<decltype(func( std::declval<T>() ))>{
return Option<decltype(func( std::declval<T>() ))>(func(*value_));
}
template<class Function>
auto operator >>= (Function func) -> decltype(func( std::declval<T>() )){
if(value_ == nullptr)
return decltype(func( std::declval<T>() ))();
return func(*value_);
}
void foreach(std::function<void ( T const& ) > func){
return func(*value_);
}
static Option<T> Unit(T const& value){
return Option<T>(value);
}
static Option<T> Unit(T&& value){
return Option<T>(std::move(value));
}
private:
std::shared_ptr<T> value_;
};
int main(int argc, const char * argv[])
{
Option<int> o(55);
auto f = [](int const& i){
return i + 1;
};
auto result = o.fmap(f);
auto tresult = result >>= [](int const& v){
return Option<int>::Unit(v * 2);
};
tresult.foreach([](int const& i){
std::cout << i << std::endl;
});
return 0;
}
相关文章:
- 如何获取std::result_of函数的返回类型
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 为什么返回类型中需要typename?C++
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- C++重写 void 函数返回类型会导致生成失败
- C++返回类型扣除失败
- 函数映射容器中C++函数返回类型重载:自动推导失败,并出现编译器错误
- 由于noexcept说明符,尾随返回类型语法失败
- 为什么decltype返回类型在递归模板中失败,而返回类型演绎却工作得很好?
- 带有模板返回类型的虚基函数:编译器在使用pointtype作为模板参数的派生类时失败(MSVC 2013)
- Android c++上的Qt与Java的互操作性在SIGSEGV为void或基本返回类型时失败
- 失败时dynamic_cast的返回类型