我有一個函數模板:專業化面向相同的模板參數
//the most generalized template
template<typename typeArg, typename typeRet>
typeRet func(const typeArg &val);
和若干專業化它,它看起來像:
template<>
someType func(const otherType &val)
{
//code
}
template<>
typeFoo func(const typeBar &val)
{
//more code
}
但它沒有缺省實現。
顯然,這兩種類型不能自動推導,所以通話的樣子:
type1 var1 = func<argType,type1>(arg);
什麼是寫僅當類型相同的情況下的默認實現的正確方法?
我嘗試了一些變種:
1日嘗試
template<typename theOnlyType, theOnlyType>
theOnlyType func(const typeArg &theOnlyType)
{
//code
}
但這是錯誤的,因爲這個功能只有一個模板參數,它不符合上面的電話。
第2次嘗試
template<typename type1, typename type2>
type1 func(const type1 &theOnlyType)
{
//code
}
通話變得模糊,考生此功能,並從第一個代碼塊的最廣義的模板。
你的意思是你想要一個默認的實現,其中'typeArg'與'typeRet'相同 – 0x499602D2
部分專業化會在這裏工作嗎? – ulidtko
是的,我的意思是類型相同時的默認實現。 不,部分專業化功能是不允許的。 – Sergey