可以通过同一个名称定义两个不同的模板(通过模板参数的数量)类?
这是我要做的:
namespace MyNamespace { template<class TRet> class FunctionObject { typedef typename TRet ReturnType; virtual ReturnType const operator()() const = 0; }; template<class TRet,class TArg0> class FunctionObject { typedef typename TRet ReturnType; typedef typename TArg0 FirstArgumentType; virtual ReturnType const operator()(FirstArgumentType const &arg) const = 0; }; }
在第二个FunctionObject结构定义的括号末尾,我收到一个错误提到太多的模板参数.
我知道这可以在C#中完成,但不知道C.有人可以在这里散发一些光吗?
解决方法
我认为部分专业化将会诀窍:
namespace MyNamespace { template<class TRet,class TArg0> class FunctionObject { typedef typename TRet ReturnType; typedef typename TArg0 FirstArgumentType; virtual ReturnType const operator()(FirstArgumentType const &arg) const = 0; }; template<class TRet> class FunctionObject<TRet,void> { typedef typename TRet ReturnType; virtual ReturnType const operator()() const = 0; }; }
您还可以从具有多个参数的主模板开始.
我认为C11它的可变模板允许这更加漂亮,但我没有时间玩这个,所以我最好离开给别人显示.