реклама на сайте
подробности

 
 
> Использование шаблонных методов С++
SergSit
сообщение Feb 2 2014, 19:57
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



Есть код:

Код
class A
{
  public:

    static void Set( unsigned param )
    {
      GPIOA->ODR = param;
    }
};



template< class ClassTemp1, uint8_t number >
class B
{
  
  public:
        enum Config
    {
      Fisrt,
      Second,
    };

    static void SetConfig( Config param )
    {
      ClassTemp1::Set( param );
    }
    template< Config param >
    static void SetConfig( )
    {
      ClassTemp1::Set( param );
    }
};

template< class Port >
class C
{

  public:

    static void Init( )
    {
      Port::SetConfig< Port::Fisrt >( );
      Port::SetConfig( Port::Fisrt );
    }

};

typedef B< A, 14 > D;
typedef C< D > Proba;


int main( void )
{
  Proba::Init( );
    
  D::SetConfig( D::Fisrt );
  D::SetConfig<D::Fisrt>(  );
}


Компилятор дает ошибку на строчке с методом Port::SetConfig< Port::Fisrt >( ); в методе C::Init():
compiling main.cpp...
src\main.cpp(99): error: #29: expected an expression
Port::SetConfig< Port::Fisrt >( );

Хотя если напрямую вызывать методы из класса D ошибок нет.

В чем моя ошибка?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SergSit
сообщение Feb 3 2014, 12:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



Мне необходимо вызвать шаблонный метод Port::SetConfig< Port::Fisrt >( ), который даст короткий код.
И это лечится)) Подсказали на другом форуме.
Надо вот так:
Код
Port:: template SetConfig< Port::Fisrt >( );


И дали ссылку на разъяснения:

Решение проблемы из стандарта

Топик закрыт.
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 3 2014, 16:41
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(SergSit @ Feb 3 2014, 16:34) *
Мне необходимо вызвать шаблонный метод Port::SetConfig< Port::Fisrt >( ), который даст короткий код.
Если включена оптимизация, то код будет один и тот же (байт в байт). Если оптимизация выключена, то короткий код не спасет sm.gif

Цитата
И это лечится)) Подсказали на другом форуме.
Посыпаю голову пеплом. Совсем забыл про эту конструкцию laughing.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 19:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016