gpt4 book ai didi

c++ - 如何在方法参数中使用 boost::asio::buffer

转载 作者:行者123 更新时间:2023-11-30 02:22:13 26 4
gpt4 key购买 nike

我正在尝试使用 boost::asio::buffer作为我的方法中的引用参数,如下所示:

void ReadDataIntoBufferPassedIn(boost::asio::buffer & buffer);

首先,编译器提示:

error: no type named 'buffer' in namespace 'boost::asio' void ReadDataIntoBufferPassedIn(boost::asio::buffer & buffer);

这看起来需要我在这里对方法进行模板化,但我的问题不仅仅是修复错误。

问题:
在不导致我传入的 asio::buffer 的额外拷贝的情况下执行此操作的最佳方法是什么?一种模板化方式?如何?如果没有,我如何解决此错误并仍然能够将 boost::asio::buffer 作为方法参数传递?

最佳答案

根据你的问题,我不清楚你是否知道 boost::asio::buffer 是一个创建缓冲区对象(可变或常量)的函数 ),所以这解释了编译错误。 Buffer 对象只是一些连续内存块的句柄,它只包含指向原始数据及其大小的指针 - (void*, size_t) 对.

如果您需要修改底层数据,您可以通过传递对 mutable_buffer 的引用并摆弄它来实现,如下所示: http://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/reference/mutable_buffer.html但是只传递数据的实际容器而不是它的 buffer View 应该更安全(类型安全方面)。

更新:您真的不需要像其他答案中建议的那样将您的函数设为模板。此外,可能不需要右值引用。这完全取决于您要对该函数执行的操作。

void ReadDataIntoBufferPassedIn(const boost::asio::mutable_buffer& buffer) {
int* p = boost::asio::buffer_cast<int*>(buffer);
*p = 5; // Do whatever you want with p
}

std::vector<int> v{1,2,3};
ReadDataIntoBufferPassedIn(boost::asio::buffer(v));

关于c++ - 如何在方法参数中使用 boost::asio::buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47538682/

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