验证模板参数是其他定义的模板

时间:2014-03-16 15:23:11

标签: c++ c++11 metaprogramming template-meta-programming

如何使用其他模板参数测试OtherFoo模板参数(对于我的TT别名)是否为Foo:

template <class... Pack>
class Foo
{

    class SomeClass {};

    template <class OtherFoo> // OtherFoo = Foo with other template parameters
    using TT = typename OtherFoo::SomeClass;
};

假设不可能进行欺骗。

1 个答案:

答案 0 :(得分:1)

具有部分专业化,如:

template <class... Pack>
class Foo
{
    class SomeClass {};

    template <class OtherFoo>  // OtherFoo = anything, but undefined
    struct TT_t;

    template <class... P> // OtherFoo = Foo with other template parameters
    struct TT_t <Foo <P...> > { using type = typename Foo <P...>::SomeClass };

    template <class OtherFoo> // OtherFoo = Foo with other template parameters
    using TT = typename TT_t <OtherFoo>::type;
};

因此,如果您尝试使用除另一个TT之外的任何参数来实例化Foo,编译器将发出错误,指出TT_t是不完整的类型。我希望这就是你所追求的。