【发布时间】:2017-06-11 14:55:36
【问题描述】:
我想使用的类中有一个函数,其定义是:
template <typename T>
class FooClass
{
/* [...] */
public:
template <typename TT>
void myFunction(int a, FooClass& b, int c,
int d, TT optional_e = static_cast<TT>(1));
}
我试着这样称呼它:
obj.myFunction(a, b, c, d);
所有参数都与它们应该具有的类型匹配。
但是,Visual Studio 在编译时抛出错误:
C2783 : could not deduce template argument for TT
但是如果我尝试以这种方式调用该函数,它编译时不会出错:
obj.myFunction(a, b, c, d, 0);
我的问题是,为什么我不能在没有可选参数的情况下调用函数?如何做到这一点?
【问题讨论】:
-
为什么还需要那个可选参数?这对我来说真的没有任何意义。
-
好吧,如果你只指定4个参数,编译器没有办法推断
TT(从什么推断类型?毕竟没有传递任何参数。)我想你可能想要类似于template <typename TT = sometypename>的东西。
标签: c++ templates optional-parameters template-argument-deduction