特定基础类的C ++类模板 [英] C++ class template of specific baseclass

查看:164
本文介绍了特定基础类的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆