为了避免在包装类中使用模板代理时的问题,我们可以使用CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)来解决。
CRTP是一种模板元编程技术,它利用继承关系的奇异性,将模板参数作为继承模板类的派生类的类型,从而实现了模板间的递归。
具体实现方法如下:
template
class Base {
public:
int func() {
static_cast(this)->do_func();
}
};
class Derived : Base {
public:
void do_func() {
// function body
}
};
使用上述代码,我们可以在包装类中使用CRTP模式,而无需使用模板代理。
template
class Wrapper {
public:
int func() {
impl_.func();
}
private:
T impl_;
};
class ConcreteClass : Base {
public:
void do_func() {
// function body
}
};
typedef Wrapper ConcreteClassWrapper;
以上例子展示了如何使用CRTP来克服模板代理的问题,操作起来也相对简单。
下一篇:包装类自动装箱赋值