假设我想强制限制传入的模板参数是 Foo 的子级。
有没有办法通过类型特征来强制执行这一点?编译时static_assert
失败会很棒。
在下面的代码中,让我们把它变成一个两部分(单独)的问题。
- 只允许
My_Limited_Template<Bar>
编译。 - 只允许
My_Limited_Template<TBar>
编译。
编辑
我为错误的命名道歉:TBar
并且TBaz
目的是非模板类。我只是在名称前附加了 T 以消除与第 1 部分中的类的歧义。
代码
struct Foo { }; // no
struct Bar : public Foo { }; // yes
struct Baz { }; // no
template< typename T >
struct TFoo { }; // no
struct TBar : public TFoo<TBar> { }; // yes
struct TBaz { }; // no
template< typename T >
struct My_Limited_Template
{
// Part One:
// My_Limited_Template<Foo> // disallow
// My_Limited_Template<Bar> // allow
// My_Limited_Template<Baz> // disallow
//
// Part Two:
// My_Limited_Template<TFoo<int>> // disallow
// My_Limited_Template<TBar> // allow
// My_Limited_Template<TBaz> // disallow
};