是否有任何人知道根据是否界定了非成员方法而专门使用模板的方法? 我知道,如果存在成员的职能,就有许多专业方法,但我从未看到过非成员的例子。 具体的问题是:专门处理运营商和提炼;共享商适用运营商和提炼;如果运营商和提炼;对T进行定义,并另外印刷点位置。 如果所有班级都界定了运营商的配制;加之;作为成员,但不幸的是,许多人使用自由职能。 我想象像以下东西:
template <typename T>
typename enable_if< ??? ,std::ostream &>::type operator<<( std::ostream & os, const shared_ptr<T> & ptr )
{
if(ptr)
return os << *ptr;
else
return os << "<NULL>";
}
template <typename T>
typename disable_if< ??? ,std::ostream &>::type operator<<( std::ostream & os, const shared_ptr<T> & ptr )
{
if(ptr)
return os << static_cast<intptr_t>( ptr.get() );
else
return os << "<NULL>";
}
Edit:就邮政而言,这里是工作解决办法。 注:加固:共享的吸收器已经安装了缺损操作器;加固;投放地址,因此没有必要使用。 由于运营商和提炼;回报是参考,因此这项工作。 就一般情况而言,我怀疑这必须加以调整,以反映有关职能的返回类型。
template <typename T>
typename boost::enable_if_c< boost::is_reference<decltype(*static_cast<std::ostream *>(0) << *static_cast<T *>(0) )>::value, std::ostream &>::type operator<<( std::ostream & os, const boost::shared_ptr<T> & ptr )
{
if(ptr)
return os << *ptr;
else
return os << "<NULL>";
}