C <T>来自T,是否安全?

时间:2017-03-21 03:29:53

标签: c++ c++11 templates inheritance

如果我可以为某个班级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 ++语法的边缘? /它是实施定义的吗? 在实际业务中使用是否安全? 有什么我应该特别关注的吗? (我希望没有。)
这种技术叫什么(如果有的话)?

1 个答案:

答案 0 :(得分:3)

它不是&#39; 在C ++的边缘&#39;但如果T是一种可以衍生出的类型,则完全合法。我不知道这个&#34;模式的任何具体名称&#34;。

请注意,您可以从std::remove_reference_t<T>派生(为了使C<B&>之类的内容有效)或保留T以使C<B&>的编译失败{1}}等等 - 它取决于。