Создание псевдонима для созданного шаблона - PullRequest
1 голос
/ 16 ноября 2010

Первоначально у меня было несколько классов фильтров обработки сигналов, которые были идентичны, за исключением нескольких констант, определяющих характеристику фильтра, поэтому я решил изменить их на класс шаблона для удобства обслуживания и расширяемости.В этом случае существуют причины для управления производительностью и памятью для предпочтения шаблона аргументам конструктора;это для встроенной системы.

Следовательно, у меня есть класс шаблона в форме:

template <int SIZE, int SCALE_MULTIPLIER, int SCALE_SHIFT>
class cBoxcarFilter
{
public:
    // Allow access to SIZE at runtime.
    static const int FILTER_SIZE = SIZE ;
    ...
}

, к которому я, например, обращаюсь, например:

template class cBoxcarFilter<8, 1, 3>

Проблема в том, что когда мне нужно получить доступ к члену FILTER_SIZE, он требует:

cBoxcarFilter<8, 1, 3>::FILTER_SIZE

, что скорее делает доступ к FILTER_SIZE избыточным, поскольку он должен повторяться в аргументах.Мое решение этой проблемы заключается в следующем:

// Create an alias for filter
#define cSpecialistBoxcarFilter cBoxcarFilter<8, 1, 3>
template class cSpecialistBoxcarFilter ;

тогда я могу получить доступ к FILTER_SIZE таким образом:

cSpecialistBoxcarFilter::FILTER_SIZE

это также имеет преимущество в значимых уникальных имен для каждого экземпляра фильтра, как в оригиналеверсии без шаблонов, но мне кажется несколько вонючим использование макроса, который выглядит как класс, поскольку он имеет другую семантику области действия.

Есть ли лучший способ создания имен классов псевдонимов для экземпляра шаблона?

Ответы [ 2 ]

10 голосов
/ 16 ноября 2010

Да, typedef!

typedef cBoxcarFilter<8, 1, 3> cSpecialistBoxcarFilter;
0 голосов
/ 16 ноября 2010

Вы можете запросить конкретные экземпляры (объекты) вашего класса для их размера фильтра:

template <int X> class A
{
  public:
  int y;
  static const int size = X;
};

int main(int, char**)
{
  A<3> a;
  printf("size is %i\n", a.size);
}

результат

size is 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...