如何解决模板模板参数和“ <<”运算符ostream
几天来,我一直在尝试了解模板模板参数。我试图在Visual Studio中使用C ++ 17编写示例,但出现此错误:
Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'std::vector<int,std::allocator<int>>' (or there is no acceptable conversion)
在此示例中,我尝试使用STL中的通用容器来突出显示C ++中模板模板参数的概念。
#include <iostream>
#include <vector>
using namespace std;
template<typename T,template<typename> typename Tpl_Type>
ostream& operator <<(ostream& out,const Tpl_Type<T>& x) {
for (auto& aux : x)
out << aux << " ";
out << endl;
return out;
}
template<typename T,template<typename>typename Tpl_Type>
void functioon()
{
Tpl_Type<T> vect2;
for (auto i = 0; i < 5; i++) {
vect2.push_back(i);
}
std::cout << vect2 << endl;
return;
}
int main()
{
functioon<int,std::vector>();
return 0;
}
我在做什么错了?
解决方法
std::vector
是具有多个模板参数的模板,因此要使functioon
或operator<<
接受它作为模板模板参数,该模板模板参数本身需要接受可变参数模板参数数量:
template<typename T,template<typename ...> typename Tpl_Type>
// ^^^
如果不可变,clang和msvc将不会编译代码。 gcc可以编译两个版本,但是我怀疑这是一个错误。
这里是demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。