【发布时间】:2012-05-25 06:03:30
【问题描述】:
一个函数模板:
template<class T> T
max(T a, T b){return (a > b)? a: b;}
使用时:
max<int>(a, b); // Yeah, the "<int>" is optional most of the time.
但是如果你允许,我们可以这样写模板:
T max<class T>(T a, T b){return (a > b)? a: b;}
//I know the return type T is not in its scope, don't focus on that.
因此,我们可以像普通函数一样维护相同形式的声明和使用。甚至不需要引入和键入关键字“模板”。我认为类模板会是一样的吗?那么是不是还有什么其他的原因让模板变成了我们今天所知道的形式呢?
我更改了表单,以便您不必关注返回类型:
auto max<class T>(T a, T b) -> T {return (a > b)? a: b;}
//This is C++11 only and ugly i guess.
//The type deduce happens at compile time
//means that return type really didn't to be a problem.
【问题讨论】:
-
这只是选择的语法。我相信这背后没有真正的令人信服的理由。这只是一个简单的决定。
-
当他们接受 c++11 时,您已经晚了几个月。现在你必须等待下一个 20 年。
-
我不记得在 Design and Evolution of C++ 中检查过这样的变体,这是 AFAIK 为当时决定的事情(大约 20 年以前)。
-
问答网站不是主观问题的好格式。但是,您并不是唯一一个要求这样做的人。 David Abrahams(MPL 背后的人)有一篇有趣的博客文章,介绍了模板代码的更短语法:cpp-next.com/archive/2011/11/having-it-all-pythy-syntax 他甚至在 clang 邮件列表上写过关于它的文章,并请求帮助将解析器/语义分析更改为尝试这种语法并检查它是否会引起歧义等:)
-
@MatthieuM。知道原因会更好。有时我不明白为什么我们需要声明(许多语言不需要)但是当我得到答案时,它的目标是帮助不打扰我在编码时心情更好,并且更好地知道如何写好代码。
标签: c++ templates syntax language-lawyer