在另一个模板化类型中使用模板化类型的参数化子类型

时间:2013-02-27 02:06:45

标签: c++ templates

是否可以实现以下行为?

template<typename T>
struct X {
    template<const bool Condition>
    struct Y;

    template<>
    struct Y<true> {
        typedef T Z;
    };
};


template<typename T>
struct A {
    typedef typename T::Y<true>::Z B;  // Error
};


int main() {
    X<float>::Y<true>::Z value = 5.0f;  // OK

    A<X<float>>::B value2 = 5.0f;  // Desired behaviour

    return 0;
}

1 个答案:

答案 0 :(得分:1)

尝试

typedef typename T::template Y<true>::Z B;

适用于gcc 4.7.2

虽然gcc抱怨结构中的完全特化,但我必须添加一个虚拟参数。