1. ホーム
  2. c++

テンプレートのtypedef - あなたのワークアラウンドは?

2023-12-01 06:42:05

質問

C++ 0x にはテンプレートエイリアス(テンプレート型定義と呼ばれることもあります)があります。以下を参照してください。 を参照してください。 . 現在の C++ の仕様にはありません。

ワークアラウンドとして何を使うのが好きですか?コンテナオブジェクトかマクロか? その価値はありますか?

どのように解決するのですか?

<ブロッククオート

回避策として何を使用したいですか?コンテナオブジェクトかマクロか?また、その価値はありますか?

正規の方法は、このようなメタファンクションを使うことです。

template <typename T>
struct my_string_map {
    typedef std::map<std::string, T> type;
};

// Invoke:

my_string_map<int>::type my_str_int_map;

これはSTLでも使われている( allocator::rebind<U> ) や Boost を含む多くのライブラリで使われています。で多用されています。 バイオインフォマティカルライブラリ .

肥大化していますが、99%の確率で最良の選択肢です。ここでマクロを使うことは、多くのデメリットに見合うものではありません。

(編集: Danielのコメントで指摘されたように、Boost/STLの規約を反映させるためにコードを修正しました)