Dav*_*one 9 c++ std template-specialization c++14
是否可以专门std::optional针对用户定义的类型?如果没有,那么提出这个标准是否为时已晚?
我的用例是一个类似整数的类,表示一个范围内的值.例如,你可以有一个位于[0,10]范围内的整数.我的许多应用程序甚至对单个字节的开销都很敏感,因此我将无法使用非专用std::optional的应用程序bool.但是,对于std::optional范围小于其基础类型的整数,特殊化将是微不足道的.我们可以简单地将值存储11在我的示例中.这应该不会在非可选值上提供空间或时间开销.
我可以创建这个专业namespace std吗?
17.6.4.2.1 [namespace.std]/1中的一般规则适用:
std只有当声明取决于用户定义的类型并且特化符合原始模板的标准库要求且未明确禁止时,程序才可以将任何标准库模板的模板特化添加到命名空间.
所以我会说这是允许的.
NB optional不会成为C++ 14标准的一部分,它将被包含在关于库基础知识的单独技术规范中,因此如果我的解释错误,则有时间更改规则.
如果您正在使用有效地将值和"无值"标志打包到一个内存位置的库之后,我建议您查看compact_optional.它正是这样做的.
它没有专门化boost::optional,std::experimental::optional但它可以将它们包装在内部,为您提供统一的界面,在可能的情况下进行优化,并在需要时回退到"经典"可选项.
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |