【发布时间】:2013-02-06 23:40:34
【问题描述】:
C++ 中是否存在严格 typedef 的习惯用法,可能使用模板?
类似:
template <class base_type, int N> struct new_type{
base_type p;
explicit new_type(base_type i = base_type()) : p(i) {}
};
typedef new_type<int, __LINE__> x_coordinate;
typedef new_type<int, __LINE__> y_coordinate;
所以我可以使这样的事情成为编译时错误:
x_coordinate x(5);
y_coordinate y(6);
x = y; // whoops
那里的__LINE__ 看起来可能很麻烦,但我不希望仅仅为了保持每种类型的唯一性而手动创建一组常量。
【问题讨论】:
-
坐标不是一个很好的应用程序。两个坐标的乘积不是坐标等。您可能需要查看 Boost.Units。
-
我删除了建议 BOOST_STRONG_TYPEDEF 的答案,因为显然这适用于重载解决方案,但不会在交叉分配时产生编译错误。
-
我质疑你想做的事情的价值。例如,当您想要执行旋转时会发生什么?
x = sin(theta)*y + cos(theta)*x应该是完全有效的。 -
这对于 base_type == int 来说是最需要的,但是如果提供了到/从 int 的转换,那么整个目的就失去了。解决方案是只提供“to”或“from”转换,并使用 fn
标签: c++ templates types idioms