【发布时间】:2017-03-21 03:29:53
【问题描述】:
如果我可以为某个类 C<T> 指定基类 (C derived from 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++ 语法的边缘? / 是实现定义的吗?
在实际业务中使用是否安全?
有什么我应该特别关注的吗? (我希望没有。)
这种技术叫什么(如果有的话)?
【问题讨论】:
-
@Nicky C 谢谢!哇,它被广泛使用!
-
@NickyC:这是一种模式,其中基类将派生类作为模板参数接收。从模板参数派生并不完全相同。
-
这看起来与具有
class D : public B<D>模式的 CRTP 相似,但有点不同,因此基类可以使用派生类的功能。 -
@Havenard:C++ 中有很多东西是编译器允许的(甚至可能是合法、有效的代码),这会引起人们的关注。
标签: c++ c++11 templates inheritance