当前位置:  开发笔记 > 编程语言 > 正文

关于模板类中的模板函数的小问题

如何解决《关于模板类中的模板函数的小问题》经验,为你挑选了1个好方法。

我试图理解一些C++语法:

template
class Foo 
{
   Foo();

   template
   Foo(const Foo& other);
};

template
Foo::Foo() { /*normal init*/ }

template
template
Foo::Foo(const Foo& other) { /*odd copy constructed Foo*/ }

所以,我编写了这样的代码,它恰好在windows和linux中编译.我不明白的是复制构造函数有两个模板定义的原因.基本上,在我找到正确的语法之前,我必须先解释一下,我想知道为什么特定的语法是正确的,而不是像template.



1> Klaim..:

第一个模板(带参数T)表示该类是用参数T模板化的.

第二个模板(带参数U)表示模板化类的成员函数(带参数T)使用参数U进行模板化 - 即构造函数.

实际上,这里有一个模板类,它将生成与用作构造函数参数的类型一样多的复制构造函数.

在复制构造函数的特定情况下,您不应该这样做,而是:

template
class Foo 
{
   Foo();

   Foo(const Foo& other);
};

template
Foo::Foo() { /*normal init*/ }

template
Foo::Foo(const Foo& other) { /*odd copy constructed Foo*/ }

因为在你的例子中,它不是复制构造函数,而是将类型U作为参数的构造函数:转换构造函数......很难预测.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有