Я хочу, чтобы класс вел себя идентично указателям, , но также поддерживает операторы сравнения, такие как <
и >
.
Я сталкиваюсь с проблемами приведения:1007 *
ptr_t<foo> x = new foo;
(bar*)x; // cast should be allowed
static_cast<bar*>(x); // cast should fail
Приведенный выше фрагмент должен вести себя так, как если бы ptr_t<foo>
было foo*
.
Вот оператор приведения:
template <typename cast_t>
explicit inline operator cast_t() {
return (cast_t)(ptr); // causes static_cast to use C-style, which is bad
}
Если я использую стиль C в определении, тогда static_cast
становится небезопасным.Если я использую static_cast
, то стиль C становится менее полезным.Как я могу это исправить?