c++ - 定义 vs 命名空间

标签 c++ templates macros typedef

我有一个代码:

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

它被用在很多地方。现在我已经将这段代码作为库包含到 qt 项目中,但它无法加载,因为它在某处使用 sptr 作为变量名。

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

最佳答案

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

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

关于c++ - 定义 vs 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239133/

相关文章:

arrays - C 将宏作为参数指针传递

c - 全局常量与#define。从安全角度来看哪个更好?

我可以从 CUDA __global__ 函数调用头文件中的 "function-like macro"吗?

c++ - 创建包含所有依赖项的独立 DLL

c++ - float 学执行时间

c++ - 模板特化 : Can we partially implement the special cases

c++ - 使用模板创建默认函数参数

c++ - 将 C++ 模板化对象存储为相同类型

C++,从派生模板类中查看基模板类中的对象

c++ - 如何找到 pthread 的创建顺序?