C ++ 17类模板参数类型推导 - 可读性

时间:2018-02-14 18:59:55

标签: c++ templates type-deduction c++17

对于支持此功能的编译器,您可以编写

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&lt; ...&gt; t1(1);)

所以程序读者至少应该知道,因为他们知道2种不同的汽车可以是不同类型的。

但我相信可以有更智能的解决方案。

修改

将“用户体验”更改为“可读性”。

1 个答案:

答案 0 :(得分:5)

  

是否有任何建议如何消除这种“用户体验”问题?

截至撰写本文时,已有no proposal written suggesting that this be changed。 C ++ 17完成,完成并出门。因此,删除此功能的任何此类提议都将与C ++ 17不兼容。

因此,这些建议需要证明自己不仅仅是称之为“'用户体验'问题”。

earliest revisions of the class template deduction proposal可以清楚地看出,目标是创建你认为不好的用户体验,以允许类似于函数模板参数“完全”推导出类模板参数。即使在"challenges" with the proposal were addressed时,也似乎没有任何建议要求模板名称之外的显式语法来调用类模板参数推断。

简而言之,提案的目标是allow constructors to "deduce their template parameters 'like we expect from other functions and methods,'"

因此,不仅没有建议消除这种“用户体验”问题;这就是“'用户体验'问题”是这个想法的重点