9

由于 C++ 元编程是函数式的:是否有任何方法可以与任何函数式编程语言(例如 Haskell 的) let 或 where 构造相媲美?

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

4

2 回答 2

2

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

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

于 2012-06-27T10:07:42.633 回答
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"
    ]
]
于 2012-06-27T14:19:35.840 回答