问题描述
我使用模板将函数中的参数表更改为可以接受任何类型的对象,但是我无法将其与其他默认参数结合使用,是否缺少某些内容?
I changed a paremeter in a function to accept any kind of object using a template but I can't use it in conjunction with other default parameters, is there something I am missing?
#include <string>
#include <iostream>
class MyClass {
public:
std::wstring msg = L"hey";
MyClass(){};
};
class MyClass2{
public:
template<class T> MyClass2(T* t, int i);
};
template<class T>
MyClass2::MyClass2(T* t,int i=0){ std::wcout << t->msg << std::endl; }
int main(int argc, char **argv)
{
MyClass mc;
MyClass2 mc2(&mc);
return 0;
}
输出:
practice.cpp:16:32: error: redeclaration of 'MyClass2::MyClass2(T*, int)' may not have default arguments [-fpermissive]
我认为在模板中不使用默认值是合理的,但是是否有其他参数的原因呢?
I thought it was reasonable to not use default values in the template but is there a reason for the other parameters?
推荐答案
您当然可以;将默认参数放在声明上,而不是定义上.
You certainly can; put the default argument on the declaration, not the definition.
将默认值放置在定义的参数列表中,而不是在声明的参数列表中,这是添加的额外功能,不适用于函数模板:
Putting the default in the definition's argument list instead of the declaration's is an added extra that is not available for function templates:
我真的不知道为什么有这个限制.
I don't really know why this restriction is in place.
类似规则:
这篇关于为什么没有模板和默认参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!