template
<
template <typename, typename, typename>
class storage_t,
typename _Tp = storage::unknown_type,
typename is_allocated = std::false_type
>
struct Example_Buffer:
public Buffer<storage_t, _Tp, is_allocated> { ... };
В этом коде я хочу удалить ссылку, если она есть у _Tp
. Я не хочу использовать typename = std::enable_if_t<std::is_reference_v<_Tp>>
, потому что я хочу, чтобы программа компилировалась, если _Tp
является ссылкой, но я хотел бы удалить ее в этом случае. Я думал о решении, но оно не казалось идеальным:
template
<
template <typename, typename, typename>
class storage_t,
typename _Tp = storage::unknown_type,
typename is_allocated = std::false_type,
typename _Tp2 = std::remove_reference_t<_Tp>
>
struct Example_Buffer { ... };
РЕДАКТИРОВАТЬ: Это не кажется идеальным, потому что кажется, что тип _Tp2
не является необходимым и его можно избежать. Я могу ошибаться; если да, пожалуйста, скажите мне.
Есть ли лучший способ сделать это? Не стесняйтесь спрашивать, если мне нужно уточнить.
РЕДАКТИРОВАТЬ: Я действительно забыл упомянуть текущее решение:
struct Example_Buffer
: public Buffer<storage_t, std::remove_reference_t<_Tp>, is_allocated { ... };
Однако я могу захотеть использовать _Tp
в Example_Buffer
struct, так что это тоже не идеально.