C++/boostmpl:结构代码Haskell';让我们,在哪里, 作为C++的元编程是有功能的:有没有方法可以做任何功能编程语言(例如Haskell)的让或在哪里构建?

C++/boostmpl:结构代码Haskell';让我们,在哪里, 作为C++的元编程是有功能的:有没有方法可以做任何功能编程语言(例如Haskell)的让或在哪里构建?,c++,haskell,boost,metaprogramming,boost-mpl,C++,Haskell,Boost,Metaprogramming,Boost Mpl,我使用的是Boost::MPL,但我希望为更长的元函数提供更多的结构。拆分成几个函数是可以的,但在某些情况下我更喜欢let/where。MPL本身不支持let子句,但一些构建在其之上的库支持。一个例子是。顾名思义,它还支持其他一些更高级的功能概念(monad)。一个很大的缺点是,metamonad不是Boost发行版的正式部分 就MPL的解决方案而言,将事物拆分为函数并使用更多名称空间对它们进行分组,然后将重要符号导入顶级名称空间可能是最佳选择。Boost.Phoenix有一个名为的构造,允许您

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

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


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

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

从链接页面:

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

    let(_x = "Hello") // hides the outer _x
    [
        cout << _x << _y // prints "Hello, World"
    ]
]
let(x=1,y=“,World”)
[
//这里有一个整数:1
let(x=“Hello”)//隐藏外部
[

CUT有一个点,就是试图把更多的模板魔术放进C++中,停止提供有用的回报,尤其是当涉及到未来的兼容性和维护时。你是否考虑过用快速的函数语言编写更多代码,可以生成从C/C++中调用的库?(OcAML SouthCype)不,我没有考虑过这一点。我使用元编程是因为我需要在编译时做一些事情,而不是因为我想写函数代码。我的代码没有那么复杂。我只是想,如果我在一个30行的元函数中使用同一个函数应用程序三次,最好使用一些结构。在C++11中,您可以使用用
constexpr
而不是模板进行编译时处理。@leftaroundaound我看不出这有什么帮助。你有没有一个例子,说明
constexpr
使元编程更结构化,并允许
let
where
?constexpr允许更多结构化代码,因为它是过程性的,而不是功能性的。I u在某些情况下,如果只对数值表达式求值,请使用它。在这些情况下,我不会使用模板元编程,因为代码可读性差得多,而且更快的代码带来的好处太小(编译器应该关心!)例如,我正在使用boost::type_traits-我不会使用constexpr获得该功能。因此,constexpr很好,但不能在所有情况下(我正在寻找解决方案)替代模板元编程。在我看来,如果你想写函数式代码,你应该使用函数式语言。我只是在搜索let构造,因为模板元编程是函数式的。谢谢你给我指出那个库。这似乎是我一直在搜索的,尽管我还不知道,但我是否会使用它。额外的库,看起来像魔术,。。。