potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

WIL GitHub Wiki テンプレートメタプログラミングヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。

テンプレートメタプログラミングヘルパー(原題:Template metaprogramming helpers)

Raymond Chen、2019/7/23、リビジョン1個

WILは少数のテンプレートメタプログラミングヘルパーを含みます。

使い方

テンプレートメタプログラミングヘルパーはwil/common.hに定義されています。

#include <wil/common.h>

variadic_logical_or

template<bool...> struct variadic_logical_or
{
    static const bool value; // いずれかのテンプレート引数がtrueならtrue
};

variadic_logical_or構造体はブール型テンプレート引数のいずれかがtrueであればwistd::true_typeから派生します。その他の場合、wistd::false_typeから派生します。

C++17からはメタプログラミングヘルパーはほとんど不要になりました。同様の効果がstd::disjunctionクラス(cppreference)畳み込み式(cppreference)により得られます。

使用例

enum class WidgetColor
{
   Red, White, Blue, Black
};

template<
    WidgetColor color,
    bool isColorful = variadic_logical_or<color == WidgetColor::Red,
                                          color == WidgetColor::Blue>::value>
struct Widget
{
    ...
};

著作権表示

この記事は以下の著作物を使用しています。

Copyright (c) Microsoft Corporation. All rights reserved. https://github.com/microsoft/wil/blob/master/LICENSE