шаблонный класс в качестве аргумента шаблона

Тема в разделе "LANGS.C", создана пользователем srm, 1 июл 2011.

  1. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    Здравствуйте. Можно ли шаблонный класс указать в качество аргумента шаблона? Так не прокатывает:

    Код (Text):
    1. template <int i>
    2. class A
    3. {
    4. public:
    5.     static int const value = i + 1;
    6. };
    7.  
    8. template <class T>
    9. class X
    10. {
    11. public:
    12.     static int const m = T<0>::value;
    13. };
    14.  
    15. int main()
    16. {
    17.     X<A> x;
    18. }
     
  2. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Код (Text):
    1. template<int x>
    2. class T
    3. {
    4. public:
    5.     static void bar()
    6.     {
    7.     }
    8. };
    9.  
    10. template<template<int x> class T>
    11. void foo()
    12. {
    13.     T<0>::bar();
    14. }
    15.  
    16. ...
    17. foo<T>();
     
  3. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    100gold, не, это немного не то. В моём примере class X должен быть именно классом, у него есть несколько мемберов, которые инициализируются посредством шаблонного класса, т.е.

    Код (Text):
    1. template <class T>
    2. class X
    3. {
    4. public:
    5.     static int const m[] = {T<5>::value, T<7>::value, ... }
    6. };
    А вот T может быть функцией, т.е. меня устроит и такой вариант


    Код (Text):
    1. template <class T>
    2. class X
    3. {
    4. public:
    5.     static int const m[] = {T(5), T(7), ... }
    6. };
    7.  
    8. inline int func(int x)
    9. {
    10.     return x + 1;
    11. }
    12.  
    13. int main()
    14. {
    15.     X<func> x;
    16. }
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    X<A<0> > x;
     
  5. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    это тоже не то.
     
  6. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    template <int i>
    class A
    {
    public:
    static int const value = i + 1;
    };

    template <template <int> class T>
    class X
    {
    public:
    static int const m = T<0>::value;
    };

    не поможет?
     
  7. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    RedLord, спасибо. То, что нужно.
     
  8. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    srm

    Код...
    Концепция...
    What the fuck?