【问题标题】:Does it make sense to specialize std::decay?专门化 std::decay 有意义吗?
【发布时间】:2016-12-08 09:24:12
【问题描述】:

我有一个类代表一个数组引用 (class array_ref) 和另一个 (即持有/拥有/包含)数组 (class array)。 array_ref 的行为类似于引用。

std::decay 特化为class array_refarray 是否有意义?

namespace std{
template<> class decay<arra_ref>{typedef array type;};
}

我还需要告诉泛型程序arrayarray_ref 的“值类型”吗?

std::decay 是否用于任何 STL 算法?

【问题讨论】:

  • 没有。 Decay 是 C 数组和函数的一个非常特殊的怪癖。 auto foo = obj 预计将数组和函数衰减为指针和函数指针。你不能用你的 array_ref 类型重现它。

标签: c++ c++11 template-specialization c++-standard-library


【解决方案1】:

标准库算法是否使用它并不重要。重要的是标准在 [meta.type.synop]/1 中所说的内容:

除非另有说明,否则为本子条款中定义的任何模板添加特化的程序的行为是未定义的。

“本子条款”中包含所有类型特征类,包括decay。所以不要专精。永远。

【讨论】:

  • 好的,谢谢。我认为应该有一个 convention 来获取其他类型的“值类型”,这些类型是引用和“非值类型”本身。 (见stackoverflow.com/a/40892183/225186中的cmets)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
相关资源
最近更新 更多