Lo standard C++ 11 specifica un tratto di tipo std::alignment_of<T>
che restituisce semplicemente il valore di alignof(T)
.Tipo di carattere standard per il valore di sizeof (T)
C'è una caratteristica simile per l'operatore sizeof
? Mi manca o è mancato lo standard, o c'è qualche oscuro motivo tecnico per cui non è stato specificato?
Ovviamente è banale creare un tale tratto, ma non posso immaginare che non sarebbe stato preso in considerazione quando si introduce std::alignment_of
.
per il contesto, ho un tipo personalizzato tratto che io uso per ottenere il valore massimo di un singolo tratto se applicato a un elenco dei tipi.
template <template<class> class Trait, typename F, typename... T>
struct trait_max
: std::integral_constant<decltype(Trait<F>::value),
(Trait<F>::value > trait_max<Trait, T...>::value) ? Trait<F>::value : trait_max<Trait, T...>::value>
{ };
template <template<class> class Trait, typename F>
struct trait_max<Trait, F>
: std::integral_constant<decltype(Trait<F>::value), Trait<F>::value>
{ };
Questa caratteristica è veramente a portata di mano per quando avete bisogno di conoscere il massimo di un insieme di tipi in questo modo:
auto max_align = traits_max<std::alignment_of, int, float, std::string>::value;
auto max_size = traits_max<std::size_of, int, float, std::string>::value; // doesn't exist
Typo nel codice, '' Trait dovrebbe essere '' Trait dopo che l'operatore '?'. Ho notato solo perché è fantastico, e lo sto usando così. –
Il motivo unico 'std :: alignment_of' è nella norma è perché era parte di TR1. –
Simple
Fortunatamente, 'modello struct size_of: std :: integral_constant {};' non è difficile neanche scrivere. –
Yakk