C++ 我可以为数组到向量编写用户定义的演绎规则吗?

C++ 我可以为数组到向量编写用户定义的演绎规则吗?,c++,arrays,vector,C++,Arrays,Vector,是否可以在std中扩展扣除规则 #包括 #包括 名称空间标准{ 模板 向量(数组&)->向量; } int main(){ 数组a={2,3,5,7};//数组! std::向量w(a); } g++10.0(wandbox)似乎忽略了我的版本 根据clang9.0(Wandbox也是),预定义规则liv位于隐藏空间中: 错误:扣减指南必须与模板“std::\u 1::vector”在同一范围内声明。否,不允许执行此操作。只有在极少数情况下才允许将内容放入命名空间std,例如std::hash

是否可以在std中扩展扣除规则

#包括
#包括
名称空间标准{
模板
向量(数组&)->向量;
}
int main(){
数组a={2,3,5,7};//数组!
std::向量w(a);
}
g++10.0(wandbox)似乎忽略了我的版本

根据clang9.0(Wandbox也是),预定义规则liv位于隐藏空间中:
错误:扣减指南必须与模板“std::\u 1::vector”在同一范围内声明。

否,不允许执行此操作。只有在极少数情况下才允许将内容放入命名空间
std
,例如
std::hash
的模板专门化。在您的情况下,可以使用类模板参数推断,但键入的内容要比所需的多一些:

std::array a = {2,3,5,7};

std::vector w(a.cbegin(), a.cend());
请注意,括号对于初始化
w
非常重要,用大括号替换它们可以推断出完全不同的结果

您还可以将上述构造函数调用分解为单独的帮助器模板:

template <class T, std::size_t N>
auto toVec(const std::array<T, N> a)
{
   return std::vector(a.cbegin(), a.cend());
}
std::vector w = toVec(a);