我想要一個帶有這個接口的函數。如何用可選編譯時參數聲明模板化函數?
func<Type1,CompileOption>(Type2 value)
//or
func<Type1>(Type2 value)
第一個編譯時參數是一個類型。這是每個函數調用都需要的。
第二個編譯時間參數是可選的。它用於修改func
的行爲。
該函數本身以常規參數的類型(Type2
)爲模板。
是否可以構建這樣的界面?
如果它不能有辦法得到類似的行爲?例如像一個模板函數,它需要兩個編譯時間參數,其中第二個是可選的?
幼稚的方法不起作用。
// invalid syntax
template< typename Type1, typename CompileOption = Default, typename Type2>
void func(Type2 t2);
// Does the wrong thing.
// CompileOption Parameter now change Type2.
template< typename Type1, typename Type2, typename CompileOption = Default>
void func(Type2 t2);
//This kinda expresses what I'm looking for
template<typename Type2>
template<typename Type1, typename Optional = Default >
void func(Type2 t2);
第一個選項不是無效語法。假設您使用C++ 0x編譯器(因爲您似乎允許在函數模板中使用默認模板參數),您還可以使用默認參數來表示非尾隨模板參數。 – 2010-12-04 18:41:19