从内部类型参数中推断外部类型

时间:2016-12-08 00:29:43

标签: c++ templates typetraits type-deduction

给定struct outer { struct inner { }; },我想从具有内部类型的参数中推断出外部类型:

template <typename T>
void f(T t) { ... }

f(outer::inner p)
{
    // deduce typename 'outer' here
}

假设所有感兴趣的outer都有一个名为inner的内部。

2 个答案:

答案 0 :(得分:3)

另外,您可以创建一个手动输入的特征:

template <typename T> struct outer_type;

template <> struct outer_type<outer::inner> { using type = outer; };
// ... other specialization for each outer::inner types

然后:

template <typename T>
void f(T t)
{
    using outer = typename outer_type<T>::type;
    // ...
}  

答案 1 :(得分:2)

不,抱歉,模板参数扣除将无法为您执行此操作。

您应该在inner中添加outer类型的typedef。

struct outer {
    struct inner {
        using OuterType = outer;
    };
};

template <typename inner>
void f(inner x) {
    typedef typename inner::OuterType outer;
    // ...
}