当类是另一个模板的模板参数时,你能使用类模板参数推导吗?

时间:2018-05-15 15:46:22

标签: c++ templates c++17

我试着写这样的代码:

#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指定模板参数?

1 个答案:

答案 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}};