C ++ / Boost MPL:结构代码同样是Haskell的let,其中,

时间:2012-06-27 08:39:12

标签: c++ haskell boost metaprogramming boost-mpl

由于C ++元编程功能正常:有没有办法做一些类似于任何函数式编程语言(例如Haskell的)let或where构造的东西?

我正在使用Boost :: MPL但希望有更多结构用于更长的元函数。分成几个函数很好,但在某些情况下我更喜欢let / where。

2 个答案:

答案 0 :(得分:2)

MPL本身不支持let子句,但是在它之上构建的一些库也可以。一个例子是metamonad。顾名思义,它还支持其他一些更高级别的功能概念(monad)。一个很大的缺点是,metamonad不是Boost发行版的官方部分。

就MPL的解决方法而言,将事物分解为函数并使用更多命名空间对它们进行分组,然后将重要符号导入顶级命名空间可能是您的最佳选择。

答案 1 :(得分:1)

Boost.Phoenix有一个名为let的结构,它允许您在更高阶函数上下文中声明局部变量。不过,我认为这是高级别的。它仍然是运行时,而不是编译时。

从链接页面:

let(_x = 1, _y = ", World")
[
    // _x here is an int: 1

    let(_x = "Hello") // hides the outer _x
    [
        cout << _x << _y // prints "Hello, World"
    ]
]