9

C++ メタプログラミングは機能的であるため、関数型プログラミング言語 (Haskell など) の let または where 構造に匹敵する何かを行う方法はありますか?

私は Boost::MPL を使用していますが、より長いメタ関数のためにより多くの構造が必要です。複数の関数に分割することは問題ありませんが、場合によっては let/where を使用したいと思います。

4

2 に答える 2

2

MPL 自体は節をサポートしていませんletが、その上に構築された一部のライブラリは節をサポートしています。一例はmetamonadです。名前が示すように、他の高レベルの機能概念 (モナド) もサポートしています。大きな欠点は、metamonadBoost ディストリビューションの公式の一部ではないことです。

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 に答える