【问题标题】:How To Tell If Two Template Classes Are The Same Type如何判断两个模板类是否为同一类型
【发布时间】:2015-03-15 08:32:45
【问题描述】:

假设我有一个具有两个模板类参数的函数,例如:

template <template <typename...> C1, template <typename...> C2>
constexpr bool is_same_container() {
    return std::is_same<C1, C2>::value;
}

is_same_container<std::vector, std::vector>();

当我编译时,编译器抱怨 C1 和 C2 需要提供模板参数。

我的问题是有没有办法直接比较两个未参数化的模板类?

std::vector 应该和 std::vector 一样。我怎样才能知道?

【问题讨论】:

  • std::vector 不是东西,而std::vector&lt;T&gt; 是?
  • std::vector 不是必须用类型参数化吗?
  • 模板必须专门化才能成为真正的类型。例如,您无法将 std::vectorstd::vector 进行比较,但您可以将 std::vector&lt;int&gt;std::vector&lt;char&gt; 进行比较。
  • std::vector 不是类型,也不是容器。它是用于制作类型和容器的模板。然而,这是一个非常有趣的问题,我很想知道它是否可以完成。
  • 是的,我想知道我们是否可以比较两个 un-parametrized 模板。

标签: c++ templates


【解决方案1】:

当然,写你自己的特质。

template<template<class...> class C1, template<class...> class C2>
struct is_same_template : std::false_type {};

template<template<class...> class C>
struct is_same_template<C,C> : std::true_type {};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    相关资源
    最近更新 更多