相关疑难解决方法(0)

比较两组类型是否相等

如何检查两个参数包是否相同,忽略它们的内部顺序?

到目前为止,我只有框架(使用std::tuple),但没有功能.

#include <tuple>
#include <type_traits>

template <typename, typename>
struct type_set_eq : std::false_type
{
};

template <typename ... Types1, typename ... Types2>
struct type_set_eq<std::tuple<Types1...>, std::tuple<Types2...>>
    : std::true_type
{
    // Should only be true_type if the sets of types are equal
};

int main() {
    using t1 = std::tuple<int, double>;
    using t2 = std::tuple<double, int>;
    using t3 = std::tuple<int, double, char>;

    static_assert(type_set_eq<t1, t1>::value, "err");
    static_assert(type_set_eq<t1, t2>::value, "err");
    static_assert(!type_set_eq<t1, t3>::value, "err");
}
Run Code Online (Sandbox Code Playgroud)

每个类型不允许在一个集合中出现多次.

c++ templates template-meta-programming variadic-templates c++11

10
推荐指数
2
解决办法
988
查看次数

使用 C++ 模板元编程表示一组类型

如何写一个模板 meta_set<class...Args>,使得 meta_set::type` 对于 Ts 的所有排列都是相同的?

换句话说,meta_set<>::type无论顺序如何,只要参数列表相同,我们就希望具有相同的值,也就是说,当将其视为一个集合(或多集合,如果更容易的话)。

例如,

std::is_same< meta_set<int,double,string>::type, meta_set<double,string,int>::type  >::value == true
std::is_same< meta_set<int,double,string>::type, meta_set<double,string,bool>::type  >::value == false
Run Code Online (Sandbox Code Playgroud)

当您希望每个模板参数有一个模板的单个实例化时,这可能会派上用场。

注意:这不是家庭作业,而是我在工作中处理模板繁重代码时感到好奇的事情。我不是元编程专家,所以我想也许人们可以分享他们的知识。

c++ template-meta-programming variadic-templates c++11 c++14

1
推荐指数
1
解决办法
1367
查看次数