给定struct outer { struct inner { }; }
,我想从具有内部类型的参数中推断出外部类型:
template <typename T>
void f(T t) { ... }
f(outer::inner p)
{
// deduce typename 'outer' here
}
假设所有感兴趣的outer
都有一个名为inner
的内部。
答案 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;
// ...
}