我原來有許多信號處理過濾器類,除了定義過濾器特性的幾個常量之外,所以我決定將它們更改爲模板類以實現可維護性和可擴展性。在這種情況下,存在性能和內存管理的原因,喜歡使用模板而不是構造函數參數;它適用於嵌入式系統。爲實例化的模板創建一個別名
因此我有一個模板類的形式爲:
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
這也讓每個過濾器實例有意義的唯一名稱的優勢,因爲在原來的非模板版本,但是對於使用看起來像一個類的宏來說,它似乎有點臭,因爲它具有不同的範圍語義。
是否有更好的方式爲模板實例創建別名類名?
這是顯而易見的,現在你說了吧! ;)必須睡着。謝謝。 – Clifford 2010-11-16 17:37:25
請注意,顯式模板實例化仍必須使用完整形式。 '模板類cBoxcarFilter <8, 1, 3>;'。但在其他地方,您可以使用此typedef作爲專門類類型的名稱。 – aschepler 2010-11-16 17:46:03