gpt4 book ai didi

c++ - 为什么这个 boost::variant 缺少运算符 <<?

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:40 24 4
gpt4 key购买 nike

我读到如果 boost::variant 的所有变体都是可流式传输的,则它是可流式传输的。然而,

#include <iostream>
#include <vector>
#include <string>
#include <boost/variant.hpp>

std::ostream& operator<<(std::ostream& out, const std::vector<int>& v) {
for(int i = 0; i < v.size(); ++i)
out << " " << v[i];
return out;
}

int main() {
boost::variant<int, std::string > a(3);
std::cout << a << '\n'; // OK

std::vector<int> b(3, 1);
std::cout << b << '\n'; // OK

boost::variant<int, std::vector<int> > c(3);
std::cout << c << '\n'; // ERROR
}

编译失败。为什么?

版本:

  • boost 1.53
  • 海湾合作委员会 4.6.3

最佳答案

我没有检查序列化的文档,但我很确定 operator<<对于 boost::variant 的类型需要通过 Argument Dependent Lookup 找到或者出现在 boost 中命名空间。

This works :

#include <iostream>
#include <vector>
#include <string>
#include <boost/serialization/variant.hpp>

namespace boost {

std::ostream& operator<<(std::ostream& out, const std::vector<int>& v) {
for(int i = 0; i < v.size(); ++i)
out << " " << v[i];
return out;
}

}

int main() {
boost::variant<int, std::string > a(3);
std::cout << a << '\n';

{
using namespace boost;
std::vector<int> b(3, 1);
std::cout << b << '\n';
}

boost::variant<int, std::vector<int> > c(3);
std::cout << c << '\n';
}

输出:

3
1 1 1
3

关于c++ - 为什么这个 boost::variant 缺少运算符 <<?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com