【问题标题】:Is it possible in any way (using C++ preprocessor etc) to replace shared_ptr<T> with T$, weak_ptr<T> with T%, and unique_ptr<T> with T?是否有可能以任何方式(使用 C++ 预处理器等)将 shared_ptr<T> 替换为 T$,weak_ptr<T> 替换为 T%,unique_ptr<T> 替换为 T?
【发布时间】:2014-08-18 06:34:00
【问题描述】:

到目前为止,答案似乎是否定的。

不幸的是,考虑到到处都是shared_ptrs 的代码在视觉上会变得嘈杂。

【问题讨论】:

  • 如果你到处都有共享指针,你可能需要重新评估你的 C++ 方式。
  • 我现在正在开发一个编译器,我在所有东西之间来回传递令牌,所以我的屏幕上到处都是 shared_ptrs 等。这是我的第一个编译器项目,所以也许我做错了. :\
  • 详细介绍您的编译器项目......顺便说一句,我认为 C++ 不是编译器的最佳语言......
  • 没什么特别的,我想为 {} 提供一个工作编译器;不使用 lex 等的语言只是为了了解它是如何工作的。因此,当我的词法分析器读取代码时,它会创建传递给解析器的标记,然后使它们成为高级表达式的子代,依此类推。有很多创建正在进行,最简单的跟踪它的方法是使用 shared_ptr。
  • 是的,可能。虽然我无法在没有看到您的代码的情况下提出任何具体建议,但我可以给出一个一般指导方针。不要害怕传递东西并按价值返回东西。 C++ 是一种值语义语言,C++ 编译器为此进行了优化。

标签: c++ c-preprocessor shared-ptr syntactic-sugar


【解决方案1】:

现在使用 C++11,一种可能的方法是使用 aliases(它比宏更简洁)。例如。对于共享指针,您可以这样做:

template<typename T>
using Shared = std::shared_ptr<T>;

然后,像下面这样使用它:

Shared<int> myInt; // Is in fact a std::shared_ptr<int>

编辑:Live example

【讨论】:

  • 我会将其添加为评论,但请注意,它解决了您当前的代码可读性问题,但并未解决您可能需要重新考虑设计您的方式的事实如果您首先有太多共享指针,请编程。
猜你喜欢
  • 2020-05-24
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2015-07-23
相关资源
最近更新 更多