Czy istnieje idiom dla ścisłego typedef w C++, być może przy użyciu szablonów?Idiom dla ścisłego typedef w C++
Coś jak:
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;
Więc mogę zrobić coś takiego błędu w czasie kompilacji:
x_coordinate x(5);
y_coordinate y(6);
x = y; // whoops
__LINE__
tam wygląda to może być kłopot, ale bym nie preferują aby ręcznie utworzyć zestaw stałych, aby każdy typ był unikalny.
Współrzędne nie są bardzo dobre zastosowanie w tej sprawie. Iloczyn dwóch współrzędnych nie jest współrzędną, itp. Zamiast tego możesz spojrzeć na Boost.Units. –
Usunąłem moją odpowiedź, która zasugerowała [BOOST_STRONG_TYPEDEF] (http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/strong_typedef.html), ponieważ podobno działa to w celu uzyskania rozdzielczości przeciążenia, ale nie generuje kompilacji błędy w przydziale krzyżowym. – Angew
Pytam o wartość tego, co chcesz zrobić. Co dzieje się, gdy na przykład chcesz wykonać rotację? 'x = sin (theta) * y + cos (theta) * x' powinno być w pełni poprawne. –