如何从对象内部的typedef获取模板参数类型

时间:2017-03-19 23:52:04

标签: c++ c++11 templates

我有以下内容:

template<typename T>
struct foo {
    typedef T type;
};

foo<int> real;
foo<int>& a = real;

我希望从a中获取模板类型 - 这可能吗?我尝试了以下内容:

a.type b;
decltype(a.type) c;
a::type c;
decltype(a::type) d;

但它们都不起作用......

1 个答案:

答案 0 :(得分:8)

对于您想要的foo<int> adecltype(a)::type e;

编辑后,您需要foo<int>& a

#include <type_traits>

std::decay<decltype(a)>::type::type e;

这是因为在后一种情况下,decltype(a)foo<int>&,因此您首先需要删除引用(这是decay所做的一部分)以获取基础类型。