【发布时间】:2021-07-15 23:47:30
【问题描述】:
为您自己的类型定义to_string 函数很容易,并且只需通过重载调用它。大部分代码都知道to_string(x) 将通过ADL 找到的约定,模板可以依赖它而不知道x 的类型。
但是相反的情况呢,比如from_string 函数?什么是类型提供自己的实现的好方式,以便其他代码可以轻松和方便调用它,并且它可以工作模板也一样?
当这些实现本身对某些类型是通用的时,为每种类型使用具有显式特化的单个模板会让人头疼。 (至少,在概念之前的实现中是这样。)
使所需的类型出现在参数列表中,无论是作为虚拟参数还是通过包装输入字符串的模板类型,其优点是函数的选择使用适当的重载分辨率,并且可以简单自然地在不同的实现之间进行选择,包括普通的单一类型函数、处理一组相关类型的模板、隐式转换和继承关系。
虽然它适用于通用代码,但调用起来很尴尬,我不想让它成为调用它的正常方式。
我的项目使用 gcc 8,它支持 C++17 和 Concepts TS。标准库对概念一无所知,但我可以使用 requires 并在自己的代码中创建概念。
什么是定义像这样from_string 这样的函数的好方法?
【问题讨论】:
-
为什么不是您要转换的类的静态成员。
staitc Blah Blah::from_string(std::string const& stream);用法:Blah x = Balh::from_string(input); -
@MartinYork 很多类型都是枚举。