【发布时间】:2018-02-14 18:59:54
【问题描述】:
对于支持此功能的编译器,您可以编写
std::tuple t1(1);
但在我看来,在这种情况下,该程序的可读性受到了损害。
例如,如果您有自己的类,其行为类似于 std::tuple,读者不会看到此模板类的不同实例可能具有不同的类型
Myple t1(1);
Myple t2(1, 2);
Myple t3(1, 3);
...
t1 == t2; // compiler error, t1 and t2 are actually of different types
t2 == t3; // no error
有什么建议可以解决这个“可读性”问题吗?
我的建议是让程序员写这样的东西
Myple<auto...> t1(1);
(甚至Myple<...> t1(1); )
所以程序读者至少会知道,因为他们知道 2 个不同的汽车可以是不同的类型。
但我相信还有更智能的解决方案。
编辑
将“用户体验”更改为“可读性”。
【问题讨论】:
-
@StoryTeller:你仍然需要阅读其他人的代码。我不同意他认为这是糟糕的“用户体验”的观点,但是当你必须与喜欢的人打交道时,你不能只说“不喜欢,不要使用”喜欢。
-
@NicolBolas - 我不记得曾经参与过没有一些风格指南的项目。如果这对 OP 意义重大,他们应该说出来。无论如何,他们在这里提出的任何建议都不会使已经以这种方式编写的代码自己改写。
-
如果你以
auto varname = ...;形式编写变量声明,这不是什么大问题,因为如果你眯着眼睛,auto varname = std::tuple{1, 2};看起来像auto varname = std::make_tuple(1, 2); -
我真的不明白能够写
Myple t1(1);的具体内容是什么。任何auto都不一样吗?如果您在代码中看到auto x = foo();和auto y = bar();,那么您要么知道x和y是什么类型,要么编译器会在您尝试x= y;时告诉您最新的信息 -
顺便说一句,该评论确实是一个问题(并非旨在暗示您的问题没有实际意义)。我猜你担心当程序员看到像
T x; T y;这样的声明时,他们习惯于拥有相同类型的变量@
标签: c++ templates type-deduction c++17