如果我可以为某个班级C derived from T
指明一个基类(C<T>
),那么我有一个问题可以很好地解决。
我之前从未这样做过,所以我创建了一个简短的测试用例it works。
#include <iostream>
using namespace std;
class B{
public: int k=5;
};
template<class T> class C : public T{};
int main() {
C<B> c;
std::cout<<c.k<<std::endl;
return 0;
}
问题
它是否处于C ++语法的边缘? /它是实施定义的吗?
在实际业务中使用是否安全?
有什么我应该特别关注的吗? (我希望没有。)
这种技术叫什么(如果有的话)?
答案 0 :(得分:3)
它不是&#39; 在C ++的边缘&#39;但如果T
是一种可以衍生出的类型,则完全合法。我不知道这个&#34;模式的任何具体名称&#34;。
请注意,您可以从std::remove_reference_t<T>
派生(为了使C<B&>
之类的内容有效)或保留T
以使C<B&>
的编译失败{1}}等等 - 它取决于。