相关疑难解决方法(0)

Haskell风格"可能"类型&*链接*在C++ 11中

Maybe在我的工作项目中,我反复发现自己需要Haskell风格(尤其是Maybe chaining).例如,来自客户的提款请求,我们获得客户ID ...在缓存中查找客户...如果找到客户...查找她的储蓄账户...如果有账户...退出...在任何指向此链中,如果存在查找失败,则不执行任何操作并返回失败.

我的链很大......有时只要6 ...所以这里是我Haskell.Data.Maybe在C++ 0x中的滑动...(注意......如果我停止使用可变参数模板,这应该在C++中工作).我已经开始为自由函数链接一个参数或成员函数没有参数,我对接口感到满意.但是,对于采用多个参数的函数...我必须编写一个lambda函数来模拟部分应用程序.有没有办法避免它?见最后一行main().即使它是未注释的,它也不会编译,而是用于const/non-const混合.但问题仍然存在.

对于大量的代码感到抱歉...我希望这不会让那些可能对此感兴趣的人感到震惊......

#include <iostream>
#include <map>
#include <deque>
#include <algorithm>
#include <type_traits>

typedef long long int int64;

namespace monad { namespace maybe {

  struct Nothing {};

  template < typename T >
  struct Maybe {
    template < typename U, typename Enable = void >
    struct ValueType {
      typedef U * const type;
    };

    template < typename U >
    struct ValueType < U, typename std::enable_if < std::is_reference < U >::value >::type > …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

30
推荐指数
2
解决办法
9251
查看次数

C++中的空传播运算符

有人在C++中实现了一个空传播运算符,类似于函数式语言中使用的运算符吗?我正在考虑一些聪明的模板解决方案,可能类似于operator->的传播行为.

让我们假设我们有一个图形对象链,比如foo->bar->baz(对不起,德米特法则).假设其中任何一个都可以为null,并且应在解除引用之前进行测试.然后代码突然变得复杂得多:

if( !foo )
  return nullptr;
if( !foo->bar )
  return nullptr;
return foo->bar->baz;
Run Code Online (Sandbox Code Playgroud)

我想用某种紧凑的语法"分解"空检查,如下所示:

foo?->bar?->baz   // imaginary null-propagation syntax
Run Code Online (Sandbox Code Playgroud)

现在,当然它不必看起来那样,只是几乎紧凑.我想我们需要的是C++中的monad,启用null测试和'continuation'.避免使用宏和lambda会很棒,但这可能是不可能的.我可以想象在每一步都重载operator - >()并且如果this为null 则短路.

但这非常具有侵入性.理想的解决方案是将每个对象包装在链中.

c++ templates c++11

5
推荐指数
1
解决办法
1081
查看次数

标签 统计

c++ ×2

c++11 ×2

templates ×1