我有一个函数模板:
//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);
仅在类型相同的情况下编写默认实现的正确方法是什么?
我尝试了一些变体:
第一次尝试
template<typename theOnlyType, theOnlyType>
theOnlyType func(const typeArg &theOnlyType)
{
//code
}
但是错了,因为这个函数只有一个模板参数,和上面的调用不对应。
第二次尝试
template<typename type1, typename type2>
type1 func(const type1 &theOnlyType)
{
//code
}
调用变得模棱两可,候选者是这个函数和第一个代码块中最通用的模板。