gpt4 book ai didi

c++ - 在 boost::asio::buffer 中使用像 std::vector> 这样的参数

转载 作者:太空狗 更新时间:2023-10-29 22:55:45 47 4
gpt4 key购买 nike

我正在尝试使用 boost 库在两台主机之间创建 UDP 通信,但我不想发送/接收字符串,而是发送 std::vector<std::complex<double>结构。

更具体地说,我有一个更大的函数,它返回一个缓冲区 std::vector<std::complex<double>类型。通过使用 .front() 我可以看到缓冲区中的值。问题是我想使用 buffer.front() 作为发送函数的参数,即“auto sent = socket.send_to(boost::asio::buffer(buffer.front()), remote_endpoint, 0, err);"

如果有帮助,我附上了一部分感兴趣的代码:

void Sender(std::vector<std::complex<double>> in) {

boost::asio::io_service io_service;
udp::socket socket(io_service);
udp::endpoint remote_endpoint = udp::endpoint(address::from_string(IPADDRESS), UDP_PORT);
socket.open(udp::v4());

//std::cout<<"The message is:"<< in<<std::endl;

boost::system::error_code err;
auto sent = socket.send_to(boost::asio::buffer(in), remote_endpoint, 0, err);
socket.close();
std::cout << "Sent Payload --- " << sent << "\n";
}


int main()
{.....
.....
.....
for (int i = 0; i < 20; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
Sender(buff.front());
}

我的问题是在 Sender 参数中我应该用什么来代替 std::vector<std::complex<double>因为不工作,我得到一个转换错误,下一个问题是是否可以这样做,我的意思是发送这种类型的数据。

如果我尝试编译,我还附加了返回我的错误:

error: could not convert ‘input.std::vector<std::complex<double> >::front()’ from ‘__gnu_cxx::__alloc_traits<std::allocator<std::complex<double> > >::value_type {aka std::complex<double>}’ to ‘std::vector<std::complex<double> >’
Sender(input.front());

谢谢!

最佳答案

再次查看您的错误消息:

error: could not convert ‘input.std::vector<std::complex<double> >::front()’ from ‘__gnu_cxx::__alloc_traits<std::allocator<std::complex<double> > >::value_type {aka std::complex<double>}’ to ‘std::vector<std::complex<double> >’

Sender(input.front());

如果我们稍微改写一下:

error: could not convert ‘input.std::vector<std::complex<double> >::front()’ from std::complex<double>’ to ‘std::vector<std::complex<double> >’

Sender(input.front());

问题是什么变得更加明显了。 input.front() 只返回(引用) vector 的第一个元素,但 Sender 想要整个 vector 。你想要:

Sender(input);

旁白:我会将 Sender 的参数更改为:

void Sender(const std::vector<std::complex<double>>& in)

这样您就不需要复制 vector - 您只需使用对原始 vector 的(常量)引用。如果您打算通过 UDP 发送它,复制 vector 可能是微不足道的 - 但这是一个有用的习惯。

关于c++ - 在 boost::asio::buffer 中使用像 std::vector<std::complex<double>> 这样的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472305/

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