【问题标题】:Wrapping std::ignore包装 std::ignore
【发布时间】:2016-03-05 16:47:17
【问题描述】:

我正在开发一个自定义库。到目前为止,我已经将 std::tuple 和 std::tie 包装到我自己的 myOwn::Tuple 和 myOwn::tie 中。它们的功能与 std::tuple 和 std::tie 的功能相同。我想用 std::ignore 做类似的事情。

到目前为止,我已经写了以下内容:

namespace myOwn
{
     auto
     tilde()
     -> decltype(std::ignore)
     {
         return std::ignore;
     }
}

我唯一的问题是我现在必须使用带括号的 myOwn::tilde()。我希望能够将其用作 myOwn::tilde。到目前为止,我在 std::ignore 上读到的只是如何使用它,

这里:Possible implementations of std::ignore

这里:Requirements for std::ignore

在这里:C++: Return type of std::tie with std::ignore

我试过了

typedef std::ignore tilde

但这并不成功。任何帮助,将不胜感激。这个问题可能对任何试图包装对象的人有用。

【问题讨论】:

  • 你认为std::ignore 是什么? typeobject ?
  • 你为什么要包装标准的东西!?
  • auto tilde = std::ignore; 有问题吗?

标签: c++ c++11 stl std wrapper


【解决方案1】:

如果你不需要修改std::ignore,而只是想重命名它,那么

decltype(std::ignore) &tilde = std::ignore;

在命名空间范围内应该做你需要的。

std::ignore 不保证是DefaultConstructibleCopyAssignable,所以不能移植构造或复制,但我们可以保存对它的引用。这个tilde 的类型是decltype(std::ignore) &,但是由于std::tie 需要引用,所以它的作用应该和std::ignore 一样。

【讨论】:

  • decltype(std::ignore)& tilde = std::ignore; 创建别名而不是另一个副本。以上假设std::ignore的类型可以自己构造。
  • @Yakk 好点,我编辑了我的答案。你可能想用那个更正来回答。
  • 恕我直言,这只是对上述答案的改进。修好这个,我就不用修了!
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多