2

複数のテンプレート パラメータを持つテンプレートがあります。

    template<typename Appl, typename StoredData>
    class Box {
    };

パラメータの値は相互に排他的です。つまり、Appl のすべての値に対して、StoredData に許可されるタイプの特定のセットのみがあります。

例: Appl は List、StoredData - double、char Appl は Tree、StoredData - int

コンパイル時にこの制限を適用する方法はありますか? そう、

     Box<List, double> - compiles
     Box<List, int> - fails
     Box<Tree, int> - compiles
4

1 に答える 1

4

はいあります:

template<typename Appl, typename StoredData>
    class Box {
        static_assert(
            std::is_same<Appl, List>::value && std::is_same<StoredData, double>::value ||
            std::is_same<Appl, Tree>::value && std::is_same<StoredData, int>::value,
            "Bad parameters"
        );
    };

http://ideone.com/enECWの実際の例を次に示します。いくつかの型を変更してみてください。コンパイルに失敗します。

于 2012-07-18T20:29:31.283 に答える