【发布时间】:2017-06-20 11:30:13
【问题描述】:
你认为什么更好?
template <typename T> void func(T x,T y) {}
或
template <typename T> void func(T x,decltype(x) y) {}
恕我直言,第二种形式似乎更可取,因为 x 和 y 类型之间的链接是明确的,并且至少在重命名模板标识符时似乎不太容易出错。
编辑
第二种形式允许您使用第一个参数的子类型调用函数,而第一种形式需要完全相同的类型。这个论点似乎比前一个要好一些。
【问题讨论】:
-
第二种形式似乎也没有必要被混淆。
-
我并没有真正了解
decltype替代方案的用例。想详细说明你为什么想要这样的东西? -
第二种形式不会为
y启用隐式转换,而第一种不会? -
@Jean-BaptisteYunès
decltype的操作数确实是 non-deduced context。 -
@Jean-BaptisteYunès,也许您不希望它是对称的,这取决于您的应用程序。我认为 decltype 版本类似于
template<typename T> void func(T x, typename identity<T>::type y){}。所以,这不是什么更正确或更明确的问题,而是你想要实现什么的问题。这两个选项在语义上是不同的,尽管在许多情况下它们的行为相似。
标签: c++ c++11 templates decltype