本文介绍了为什么没有模板和默认参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我使用模板将函数中的参数表更改为可以接受任何类型的对象,但是我无法将其与其他默认参数结合使用,是否缺少某些内容?

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.

类似规则:

这篇关于为什么没有模板和默认参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 08:48