我有一个代码:
namespace My
{
#define sptr std::shared_ptr;
}
它被用于很多地方。现在我已将此代码作为库包含到qt项目中,并且无法加载,因为它使用sptr
作为变量名称。
我可以修改Qt标头并重命名变量,但这在可移植性方面并不好。解决这个问题的最佳方法是什么? typedef
不能与模板一起使用。我知道模板结构的黑客,但我仍然需要修改我的代码。
答案 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。