![]() |
1
29
那是不可能的。返回类型不参与类型推导,而是由于已经匹配了适当的模板签名。不过,您可以将其隐藏起来,以防大多数情况下使用:
这个语法实际上是比初始语法更好还是更差
P.S.C++ 11将允许跳过一种类型声明:
|
![]() |
2
23
我唯一能想到的是:make allocate一个非模板,它返回一个非模板代理对象,该对象有一个模板化的转换运算符,它可以完成真正的工作:
|
![]() |
3
8
你可以走相反的路线。 如果你正在使用一个最新的编译器(MSVC 2010,它应该在几天之内,或者GCC的当前版本),并且不介意依赖C++ +0x特性:
会为你省下额外的钱
|
![]() |
4
4
(这个答案与@unclebens相同,但更一般一些,因为它完善了任何论点。)
这在像haskell这样的语言中非常有用,例如,
(这里是 sample code on ideone )
首先,从函数开始
当被要求输入字符串时,它将返回第一个参数中的字符串。当被要求输入int时,它将返回第二个参数。
我们可以定义一个函数
为了使这项工作正常进行,我们需要一个临时存储函数参数的对象,并在需要时运行函数。 convert 至所需返回类型:
另外,上面的代码适用于两个arg或三个arg函数,不难理解如何扩展它。 这是很多代码要写!对于要应用此函数的每个函数,可以编写一个宏来执行此操作。在您的文件顶部类似这样的内容:
然后你可以用
|
![]() |
5
1
同样,不能在返回类型上重载函数,也不能在返回类型上进行模板推导。出于同样的原因-如果f()是一个返回某些内容的模板/重载,那么这里使用的类型是:
|
![]() |
6
0
您可以尝试对其使用宏。除此之外,我不知道这是如何工作,只有一个声明。
约翰内斯的分数是有效的。问题很容易解决。但我认为将逗号作为类型的一部分需要c99预处理器varargs扩展:
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |