如何解决如何专门设计用于返回不同类型的模板函数?
我目前有一个功能模板,该模板读取从配置文件获得的字符串,并创建并返回指向派生类的新实例的共享指针:
template <typename T> std::shared_ptr<T> foo(std::string& info)
{ /* */ }
我想在返回特定类时对此进行专门化,因为它需要以不同的方式处理字符串,但是我找不到一种处理方法。 尝试
std::shared_ptr<Derived> foo(std::string& info)
{/* */}
和
template <> std::shared_ptr<Derived> foo(std::string& info)
{/* */}
都失败了,因为我似乎违反了一个定义规则。 我也尝试过
template <> std::shared_ptr<Derived> foo<std::shared_ptr<Derived>>(std::string& info)
{/* */}
但是我收到了Visual Studio错误消息C2192(显式专门化'declaration'不是功能模板的专门化)。
解决方法
您只需要在标识符后提供模板参数即可。您最后一次尝试是关闭,但是模板参数是Derived
而不是std::shared_ptr<Derived>
:
template <> std::shared_ptr<Derived> foo<Derived>(std::string& info)
// Add the template argument here ^^^^^^^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。