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>;
}

另请参阅@Kerrek SB 对有关此特定用例的问题的评论。

于 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 回答