【发布时间】:2017-07-23 16:31:33
【问题描述】:
如何检查一个参数包(解释为一组)是否是另一个参数包的子集?
到目前为止,我只有框架(使用 std::tuple),但没有功能。
#include <tuple>
#include <type_traits>
template <typename, typename>
struct is_subset_of : std::false_type
{
};
template <typename ... Types1, typename ... Types2>
struct is_subset_of<std::tuple<Types1...>, std::tuple<Types2...>>
: std::true_type
{
// Should only be true_type if Types1 is a subset of Types2
};
int main() {
using t1 = std::tuple<int, double>;
using t2 = std::tuple<double, int>;
using t3 = std::tuple<int, double, char>;
static_assert(is_subset_of<t1, t1>::value, "err");
static_assert(is_subset_of<t1, t2>::value, "err");
static_assert(is_subset_of<t2, t1>::value, "err");
static_assert(is_subset_of<t2, t3>::value, "err");
static_assert(!is_subset_of<t3, t2>::value, "err");
}
每个类型都不允许在一个集合中出现多次。
如果该解决方案适用于 C++11,那就太好了。
【问题讨论】:
-
我之前有一个similar question,但现在我无法将我的代码从相等检查修改为子集检查。
标签: c++ c++11 templates variadic-templates template-meta-programming