特定基础类的C ++类模板 [英] C++ class template of specific baseclass
本文介绍了特定基础类的C ++类模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有类:
class Base {};
class A:public Base {
int i;
};
class B:public Base {
bool b;
};
现在我想定义一个模板类:
template<类型名T1,类型名T2>
class BasePair {
T1 first;
T2 second;
};
但是我想定义它,只有Base类的后代可以用作模板参数。
解决方案
更准确地说:
class B {};
class D1:public B {};
class D2:public B {};
class U {};
template< class X,class Y>类P {
X x;
Y y;
public:
P(){
(void)static_cast< B *>((X *)0);
(void)static_cast< B *>((Y *)0);
}
};
int main(){
P< D1,D2>好;
P< U,U>诺克// error
}
Let's say I have the classes:
class Base{};
class A: public Base{
int i;
};
class B:public Base{
bool b;
};
And now I want to define a templated class:
template < typename T1, typename T2 >
class BasePair{
T1 first;
T2 second;
};
But I want to define it such that only decendants of class Base can be used as templateparameters.
How can I do that?
解决方案
More exactly:
class B {};
class D1 : public B {};
class D2 : public B {};
class U {};
template <class X, class Y> class P {
X x;
Y y;
public:
P() {
(void)static_cast<B*>((X*)0);
(void)static_cast<B*>((Y*)0);
}
};
int main() {
P<D1, D2> ok;
P<U, U> nok; //error
}
这篇关于特定基础类的C ++类模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文