【问题标题】:can I explicitly specialize std:shared_ptr::operator ->我可以明确专门化 std:shared_ptr::operator ->
【发布时间】:2016-04-08 12:41:55
【问题描述】:

我第一次问问题,所以祈祷。

我想提供一个专门的 shared_ptr::operator-> 以下内容无法在 gcc 4.8.3 上编译

template<> 
widget* std::shared_ptr<widget>::operator->() const 
{ 
    return nullptr; 
}

我得到以下编译错误 错误:在“std::shared_ptr”中没有声明成员函数“operator->”

我已经尝试了一些关于如何专业化的变体,但我一直遇到同样的错误。例如,将其包装在命名空间 std 范围内,还尝试了尾随 reutrn 类型,使其成为 noexcept 等

【问题讨论】:

  • 你为什么要这样做?
  • 啊,没有问题,我正在尝试使用智能指针编写一些前置条件和后置条件。我可以使用我自己编写的手写智能指针让它们足够轻松地工作,但想看看我是否可以使用一些预建的,例如STL 或提升。
  • 也许看看这个其他问题:stackoverflow.com/questions/15876325/…
  • @JoachimPileborg 您正在谈论部分专业化。一个完整的专业化可以是独立的
  • @PMcK 也许shared_ptr 从它的(隐藏的)基类like here 继承operator-&gt;

标签: c++ templates c++11 stl shared-ptr


【解决方案1】:

不,您不能专门化 std 中类型的成员函数。这样做会使您的程序格式错误(我相信不需要诊断)。即使它“有效”也是非法的。

您可以为用户提供的类型专门化整个类型,但这基本上涉及从头开始重写std::shared_ptr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多