我试着写这样的代码:
#include <string>
#include <vector>
#include <utility>
using namespace std::string_literals;
int main(){
std::vector v{1,2,3};
std::pair p{1,"a"s};
//std::vector<std::pair> vp{{1,"a"s}, {2, "b"s},{3,"c"s}}; // ERROR
}
但是它给出了编译错误,其中pair是vector的模板参数。
有没有办法让类模板扣除在这里工作,还是我需要为pair指定模板参数?
答案 0 :(得分:4)
目前不支持此功能。来自[dcl.type.class.deduct]p2:
new-type-id 中 type-specifier-seq 中也可以[在变量声明中使用类型]也可以使用推导类类型的占位符 new-expression 的 type-id ,或显式类型转换中的 simple-type-specifier (功能表示法)。 推断类类型的占位符不得出现在任何其他上下文中。
从我突出显示的句子中可以看出,由于您的使用与上述任何地方都不匹配,因此您的代码格式不正确。
你可以这样做:
std::vector vp{std::pair{1, "a"s}, {2, "b"s}, {3, "c"s}};