因此,我有这段代码,为了方便起见,我希望其构造函数的默认参数为int类型且为0。(我的项目类中有更多参数,其中一个是可选参数,我不希望写两次构造函数,因为它很大

class mama{
    public:
    template<typename x> mama(x i=int(0)){}
};

int main(){
    mama x;
}

这行不通,因为它说找不到构造函数,所以还有另一种方法可以做到这一点吗?
error: no matching function for call to ‘mama::mama()'
note: candidates are: mama::mama(const mama&)

最佳答案

请注意,功能模板不允许使用默认模板参数。为什么不创建类模板?

template <class T=int>
class mama{
    public:
    mama<T>(T i=0){}
};

int main(){
    mama<> x; // no argument based template parameter deduction possible
}

10-05 18:06