我最初有许多信号处理过滤器类,除了定义过滤器特性的几个常量外,它们是相同的,因此我决定将这些更改为模板类以实现可维护性和可扩展性。在这种情况下,有一些性能和内存管理原因可以优先使用模板而不是构造函数参数。它适用于嵌入式系统。
因此我有一个表格的模板类:
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
这也具有每个过滤器实例的有意义的唯一名称的优点,就像在原始的非模板化版本中一样,但是使用看起来像类的宏看起来有点臭,因为它具有不同的范围语义。
是否有更好的方法为模板实例创建别名类名?
答案 0 :(得分:10)
是的,typedef
!
typedef cBoxcarFilter<8, 1, 3> cSpecialistBoxcarFilter;
答案 1 :(得分:0)
您可以询问类的具体实例(对象)的过滤器大小:
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