6

プロジェクトをC++11に移行し、可能な限り多くの標準ライブラリを使用しようとしています。

移行を完了する前に、ブーストとSTLの実装をすばやく切り替える方法が必要ですshared_ptr(ベンチマーク、単体テストなどを実行するため)。

だから私はこのようにエイリアスを定義しましたshared_ptr

#ifdef _USE_BOOST_
template <class C>
using shared_ptr = boost::shared_ptr<C>
#else
template <class C>
using shared_ptr = std::shared_ptr<C>
#endif 

今私は同じことをする必要がありmake_sharedます...しかしどうやって?大きい?ラッパー?私はどちらも本当に好きではありません。選択肢は何ですか?

4

1 に答える 1

7

可変個引数テンプレートと完全な転送の使用:

template<typename C, typename...Args>
shared_ptr<C> make_shared(Args &&...args) {
#ifdef _USE_BOOST_
  return boost::make_shared<C>(std::forward<Args>(args)...);
#else
  return std::make_shared<C>(std::forward<Args>(args)...);
#endif
}
于 2012-11-02T14:17:14.513 に答える