定义vs名称空间

时间:2012-09-02 19:39:28

标签: c++ templates macros typedef

我有一个代码:

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

它被用于很多地方。现在我已将此代码作为库包含到qt项目中,并且无法加载,因为它使用sptr作为变量名称。

我可以修改Qt标头并重命名变量,但这在可移植性方面并不好。解决这个问题的最佳方法是什么? typedef不能与模板一起使用。我知道模板结构的黑客,但我仍然需要修改我的代码。

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:2)

您可以使用以下内容:

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

这是围绕std::shared_ptr的简单包装器。这将适用于C ++ 2003和C ++ 11。