c++ - 在模板本身中检索最里面的模板类型

标签 c++ templates types

是否可以从模板中检索同一类型的堆叠模板的最内层类型?我想在以下示例中检索 double 类型:

template<typename T>
struct is_a : std::false_type {};

template<typename T>
struct A
{
    using type = std::conditional_t<
        is_a<T>::value,
        T::type, // if it's an A, go deeper
        T>;      // if not, we're done
};
template<typename T>
struct is_a<A<T>> : std::true_type {};

int main()
{
    A<A<A<A<A<double>>>>>::type d = 3.0;
    return 0;
}

它的动机是question .另外,我发现了这个 post , 表示它可能与 typenametemplate 关键字放置有关,但我自己无法让它工作。

最佳答案

除非我遗漏了什么,否则我只会部分专门化一个模板以使事情变得更容易

template<typename T>
struct A
{
    using type = T;
};

template<typename T>
struct A<A<T>>
{
    using type = typename A<T>::type;
};

int main()
{
    A<double>::type a = 5.0;
    A<A<double>>::type d = 3.0;
    A<A<A<double>>>::type c = 9.5;
    return 0;
}

Live sample

关于c++ - 在模板本身中检索最里面的模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50344153/

相关文章:

c++ - 是否可以在 C++ 中序列化和反序列化一个类?

c++ - 数组中的 AVX 对齐

c++ - 是否可以检测指向成员函数的指针?

javascript - 大型 SPA 前端中的静态与动态类型检查?

types - MPI 数据类型有什么好处?

c++ - 当 unordered_map 中不存在键时返回零

c++ - 将 OpenGL 与 Visual Studio 2013 Express 结合使用

c++ - C++ 中的访问说明符

c++ - 使用模板查找最大值

TypeScript 参数类型推断失败