我可以明确地专门化 std:shared_ptr::operator ->
can I explicitly specialize std:shared_ptr::operator ->
我第一次问问题,所以手指交叉。
我想提供 shared_ptr::operator-> 的专业化
以下不会在 gcc 4.8.3
上编译
template<>
widget* std::shared_ptr<widget>::operator->() const
{
return nullptr;
}
我得到以下编译错误
错误:'std::shared_ptr'
中没有声明成员函数'operator->'
我已经尝试了一些关于如何专门化它的变体,但我总是遇到同样的错误。例如,将其包装在命名空间标准范围内,还尝试了尾随 reutrn 类型,使其成为 noexcept 等
不,您不能从 std
中的类型特化成员函数。这样做会使您的程序格式错误(我相信不需要诊断)。即使"works"也是非法的
您可以将整个类型专门化为用户提供的类型,但这基本上涉及从头开始重写 std::shared_ptr
。
我第一次问问题,所以手指交叉。
我想提供 shared_ptr::operator-> 的专业化 以下不会在 gcc 4.8.3
上编译template<>
widget* std::shared_ptr<widget>::operator->() const
{
return nullptr;
}
我得到以下编译错误 错误:'std::shared_ptr'
中没有声明成员函数'operator->'我已经尝试了一些关于如何专门化它的变体,但我总是遇到同样的错误。例如,将其包装在命名空间标准范围内,还尝试了尾随 reutrn 类型,使其成为 noexcept 等
不,您不能从 std
中的类型特化成员函数。这样做会使您的程序格式错误(我相信不需要诊断)。即使"works"也是非法的
您可以将整个类型专门化为用户提供的类型,但这基本上涉及从头开始重写 std::shared_ptr
。