Первоначально у меня было несколько классов фильтров обработки сигналов, которые были идентичны, за исключением нескольких констант, определяющих характеристику фильтра, поэтому я решил изменить их на класс шаблона для удобства обслуживания и расширяемости.В этом случае существуют причины для управления производительностью и памятью для предпочтения шаблона аргументам конструктора;это для встроенной системы.
Следовательно, у меня есть класс шаблона в форме:
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
это также имеет преимущество в значимых уникальных имен для каждого экземпляра фильтра, как в оригиналеверсии без шаблонов, но мне кажется несколько вонючим использование макроса, который выглядит как класс, поскольку он имеет другую семантику области действия.
Есть ли лучший способ создания имен классов псевдонимов для экземпляра шаблона?