在我的項目之一,我有下面的類模板層次:模板簡化
template <typename FruitType, typename ParentFilterType = void>
class filter;
template <typename FruitType> // Specialization when no parent filter is needed
class filter<FruitType, void>;
哪裏FruitType
可以是任何東西。假設它是apple
,banana
或orange
之一。 所以基本上,一個filter
可以有自己的父filter
類型。
我在filter
代碼無法控制:它必須保持,因爲它是。
用戶代碼通常是這樣的:
filter<apple, filter<banana, filter<orange> > > my_apple_filter;
顯然,這是一個有點冗長。我想知道是否有可能獲得更可讀的東西。喜歡的東西:
complex_filter<apple, banana, orange>::type my_apple_filter;
凡complex_filter<apple, banana, orange>::type
將解析爲filter<apple, filter<banana, filter<orange> > >
。
我試過complex_filter
是一個struct
模板,裏面有typedef
但目前還沒有成功。模板參數的數量應該是可變的(從1到5)。
你有沒有想過類似的東西?我怎麼能這樣做?
(我遺憾的是不能使用的C++ 0x,但如果有一個與它一個更好的解決方案,隨意張貼,因爲它是一件好事,知道)
謝謝。
你可以使用boost嗎? boost :: mpl有類型向量和metafucntions可以讓你做這樣的事情 – PlasmaHH
@PlasmaHH:是的,我可以。 – ereOn
C++ 03或C++ 0x?在C++ 0x中,您可以使用可變參數模板來簡化語法 –