C++ std::any-为什么缺少这么多操作员?

C++ std::any-为什么缺少这么多操作员?,c++,std,stdany,C++,Std,Stdany,我正在考虑将std::any用于类型擦除,作为我正在构建的接口的一部分,我想知道为什么它缺少那么多运算符,比如“+”、“=”。我修补了Coliru,在那里我扩展了std::any,使之可求和并可打印到一个ostream中。这只适用于现在持有double的任何类型,但这个概念是可行的,它只是需要实现来支持所有基本的数字数据类型(只要lhs和RH对于操作数是相同的类型) 考虑到我能够在这么短的时间内扩展任何类似的操作,为什么stl实现在操作数方面如此有限 任何想法都是值得赞赏的。因为从总体上讲(这是

我正在考虑将std::any用于类型擦除,作为我正在构建的接口的一部分,我想知道为什么它缺少那么多运算符,比如“+”、“=”。我修补了Coliru,在那里我扩展了std::any,使之可求和并可打印到一个ostream中。这只适用于现在持有double的任何类型,但这个概念是可行的,它只是需要实现来支持所有基本的数字数据类型(只要lhs和RH对于操作数是相同的类型)

考虑到我能够在这么短的时间内扩展任何类似的操作,为什么stl实现在操作数方面如此有限


任何想法都是值得赞赏的。

因为从总体上讲(这是
std::Any
所渴望的),这些操作符没有意义。关于你的具体例子

+
:对于类似日期的对象没有意义


=
:对于只写对象来说毫无意义。

any
设置为在没有这些操作符的情况下保存某个对象时,扩展如何运行?限制是导致它失效的原因。您必须使用类型擦除所有可能的操作数类型集的笛卡尔积,这对于内置类型和标准类型来说是令人生畏的,对于任意用户定义类型来说是不可能的,并且在任何情况下都会有巨大的开销。我接受这一点作为一个障碍,但是考虑到std::any是类型安全的,不应该像std::any sum(a1+a2)这样的赋值对于相同类型的a1和a2工程,概念上如何?我不建议支持lhs和rhs类型的所有可能组合。不,不应该<代码>标准::任何都是一个容器。它不是(也不应该被认为是)实际价值。遵循这一原则,为它定义运算符与为
std::map
定义运算符具有相同的含义。e、 g:不太多。@d-karl将其限制为相同的类型是可以做到的,您必须在对象中键入擦除所有运算符。但这又是一次,由于没有太多的功能,导致了相当多的强制开销(而且错误会在运行时被捕获,呃)。对于标准容器类型来说,将这种利用留给用户更有意义。