Как определить шаблонный тип? только через наследоване?

Тема в разделе "LANGS.C", создана пользователем cupuyc, 22 май 2010.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    есть 2 вот таких класса:
    Код (Text):
    1. template <int a, class t>
    2. class Ca : public t
    3. { };
    4.  
    5. template <int i>
    6. class Cb
    7. { };
    мне нужно создать третий, вот такого типа:
    Код (Text):
    1. template <int i> Ca<i, Cb<i> >  Cx;
    у меня получается только через наследование, т.е. так:
    Код (Text):
    1. template <int i>
    2. class Cx :
    3.   public Ca<i, Cb<i> >
    4. { };
    Не очень нравится такой способ, т.к. если, например, Ca имеет конструктор с параметрами, то его нужно повторно описывать для класса Cx.

    через typedef не получается :dntknw:(
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    В C++03 и не получится. Шаблонный typedef появился только начиная с C++0x. Поддерживает ли его VS2010 - не помню.
     
  3. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    _DEN_, только наследование?
     
  4. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    можно так:

    template <int i, class Cbty = Cb<i>, class Caty = Ca<i, Cbty> > class Cx
    {

    };
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если ещё только через make функцию, у которой будет один шаблонный параметр. По-другому не получится, так как не выводить и не изменять кол-во параметров, ни класс, ни его специализации не могут. typedef не особо на что тут влияет.

    Ну или вот так корявенько.
    Код (Text):
    1. class dummy {};
    2.  
    3. template <int a, class t = dummy>
    4. class Ca : public t
    5. { };
    6.  
    7. template <int i>
    8. class Cb
    9. { };
    10.  
    11. template <int a>
    12. class Ca<a, Cb<a> >
    13. {
    14. };
    15.  
    16.  
    17. int main ()
    18. {
    19.         Ca<5> a;
    20. }
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    template <int i> Cx
    {
    typedef Ca<i, Cb<i> > type;
    };

    Cx<4>::type obj;
     
  7. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    _DEN_
    >Шаблонный typedef появился только начиная с C++0x. Поддерживает ли его VS2010 - не помню.
    Не поддерживает, к сожалению.