如何使用其他模板参数测试OtherFoo模板参数(对于我的TT别名)是否为Foo:
template <class... Pack>
class Foo
{
class SomeClass {};
template <class OtherFoo> // OtherFoo = Foo with other template parameters
using TT = typename OtherFoo::SomeClass;
};
假设不可能进行欺骗。
答案 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
是不完整的类型。我希望这就是你所追求的。