1

私はコードをもっている:

namespace My
{
    #define sptr std::shared_ptr;
}

多くの場所で使用されました。このコードをライブラリとしてqtプロジェクトに含めましたが、どこかでsptr変数名として使用されているため、ロードに失敗しました。

Qtヘッダーを変更して変数の名前を変更することはできますが、これは移植性の面では良くありません。この問題を解決するための最良の方法は何ですか?typedefテンプレートでは使用できません。テンプレート構造を使用したハックは知っていますが、それでもコードを変更する必要があります。

4

2 に答える 2

8
namespace ns {
  template<typename T>
  using sptr = std::shared_ptr<T>;
}

この特定のユースケースに関する質問に対する@KerrekSBのコメントも参照してください。

于 2012-09-02T19:40:26.160 に答える
2

以下を使用できます。

  template<typename T>
  struct sptr : std::shared_ptr<T> { };

これは、 の単純なラッパーstd::shared_ptrです。これは、C++2003 と C++11 の両方で機能します。

于 2012-09-02T19:56:45.847 に答える