C++ 当类是另一个模板的模板参数时,是否可以使用类模板参数推断?
我试图编写如下代码:C++ 当类是另一个模板的模板参数时,是否可以使用类模板参数推断?,c++,templates,c++17,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"
#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
}
std::vector vp{std::pair{1, "a"s}, {2, "b"s}, {3, "c"s}};
#包括
#包括
#包括
使用名称空间std::string_文本;
int main(){
std::向量v{1,2,3};
std::对p{1,“a”s};
//向量vp{{1,“a”s},{2,“b”s},{3,“c”s};//错误
}
但它在pair是向量的模板参数的行中给出编译错误
有没有办法让类模板推断在这里工作,或者我需要为pair指定模板参数?目前不支持这种方法。发件人: 推导类类型的占位符也可以[在变量声明中也作为类型]在新类型id或新表达式的类型id的类型说明符seq中使用,或者在显式类型转换(函数表示法)中作为简单类型说明符使用推导类类型的占位符不得出现在任何其他上下文中。 正如您从我强调的句子中看到的,因为您的使用与上面提到的任何地方都不匹配,所以您的代码格式不正确 你可以这样做:
#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
}
std::vector vp{std::pair{1, "a"s}, {2, "b"s}, {3, "c"s}};
我不理解标准报价,但我认为您理解,并且它确实说明了您所说的内容。:)@NoSensetal我要“翻译”它:“没有模板参数列表的模板名称也可以在
新的表达式中使用(作为类型),或者在显式类型转换(函数表示法)中作为类型。这样的模板名称不能出现在任何其他上下文中。”@PiotrNycz tnx,fixed