2 つの MPL シーケンス ( などboost::mpl::set) に順序に関係なく同じ要素が含まれているかどうかを確認する簡単な方法はありますか?
たとえば、次のことを考慮してください。
#include <boost/mpl/set.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/assert.hpp>
int main()
{
typedef boost::mpl::set<int, double, bool> X;
typedef boost::mpl::set<double, bool, int> Y;
// We'd want this to pass, but obviously it won't ...
BOOST_MPL_ASSERT((boost::mpl::equals<X, Y>));
}
boost::mpl::size原則として、(i) X と Y が同じサイズであること ( を使用) と (ii) X のすべての要素が Y に含まれていることを検証すること( を使用)を確認する定型文を書くことができますboost::mpl::contains。別の方法は、両方のシーケンスを何らかの「正規の順序」に並べ替えてから、それらが等しいかどうかを確認することですが、これに機能があるかどうかはわかりません。
しかし、Boost.MPL (または Boost.MPL のどこかに) で必要なことを既に実行している関数はあるのでしょうか?