7

コンパイラが可変個引数テンプレートをサポートしているかどうかを教えてくれるマクロはありますか?

#ifdef VARIADIC_TEMPLATES_AVAILABLE

template<typename... Args> void coolstuff(Args&&... args);

#else

???

#endif

それらがサポートされていない場合は、一連のオーバーロードでそれらをシミュレートすると思います。より良いアイデアはありますか?仕事を楽にするプリプロセッサライブラリがあるのではないでしょうか?

4

2 に答える 2

8

多分:#ifndef BOOST_NO_VARIADIC_TEMPLATES


可変個引数テンプレートがサポートされていない場合は、ブースト タプル ライブラリの使用を考えるかもしれません。

template<typename Tuple> void coolstuff(Tuple&& args);

と:

coolstuff(boost::make_tuple(1, 2, 3));
于 2010-06-01T17:24:10.157 に答える
7

可変個引数テンプレートが利用できない場合、現在のバージョンの Boost では BOOST_NO_VARIADIC_TEMPLATES が定義されているようです。これはによって提供されboost/config.hppます。config.hpp のドキュメントについては、こちらを参照してください。

可変個引数テンプレートが利用できない場合は、あなたが言ったように、おそらく一連のオーバーロードでそれらをシミュレートする必要があります。ここではBoost.Preprocessorライブラリが役立ちます。テンプレートのオーバーロードを含む、あらゆる種類の反復的なソース コードを自動化するように設計されています。Boost ソース ツリーで BOOST_NO_VARIADIC_TEMPLATES を検索して、可変個引数テンプレートをシミュレートするために使用する例を確認できます。

于 2010-06-01T17:33:44.410 に答える