2016-05-02 11 views
7

私はstd::alignment_ofタイプの形質とすぐに出会う友人std::alignment_of_vを見つけました。彼らは具体的にはalignofの平凡な呼び出しに相当するように設計されているように見えます。また、_vヘルパーの将来の追加は、それが単なるレガシービットではないことを示しています。`std :: alignment_of`対` alignof`

std::alignment_of_v)の使用方法は、alignofの場合はどうなりますか?

+0

* gnu-alignof-expression * :-)ではなく、式で使用するときに真のエラーが発生する。 – Jarod42

答えて

6

ほとんど完全に冗長です。 @Revolverが指摘しているように、彼らは別の論文に紹介されており、alignment_ofはほぼそのままboostに由来しています。

しかし、それはその形質が役に立たないという意味ではありません。

template<class...>classは、他のtemplateに渡して、メタプログラミングで使用することができます。 alignofのような演算子は、メタプログラミング機能に渡す前にtemplate<class>class alignment_ofと書く必要があります。

と同じことが、std::size_of<class>テンプレートを必要とすると言えるでしょう。彼らはstdすべての::valueintegral_constant型テンプレートを席巻し、_v変数テンプレートを追加したので

...

_vの添加をしました。どのようなものが価値があるものか、絵画を描かれず、ほとんど無意味なものであるかを考えてみましょう。それを行うには、価値のあるものを選ぶ努力をするよりも簡単です。機能が廃止されていないという証拠ではありません。

+0

メタ機能自体の有用性は私の心を超えていませんでした。それは非常に良い点です、ありがとう! – Quentin

4

std::alignment_ofは、ブースト型形質のポートとして導入されています。これは、C++ 11とalignofというキーワードよりも前です。この特性はalignof演算子に取って代わられましたが、主に互換性の目的で保持されていました(したがってboost::std::に置き換えることができます)。_v変数別名がライブラリの他の部分との整合性のために導入されました。

+0

あなたの答えからは、別々に導入されたかのように見えます(C++ 11以降)。 – edmz

+0

@black技術的には別々に導入されました。私の答えのポイントは、それが標準に含める前に、それがプレC++ 11ライブラリの一部であったということでした。 –

+0

'alignment_of'はTR1にありました。 –

関連する問題