草庐IT

内包装

全部标签

c++ - 努力编写 C API 的线程安全 C++ 包装器

我正在编写CAPI的“线程安全”C++包装器,而API本身不是内部线程安全的。我尝试过使用RAII。我想知道,我的实现是否正确?以及它是否是线程安全的。我感谢对我的代码的任何评论。提前致谢!要包装的CAPI如下,/*andatastructurewhichrepresentsaconnectionproxytothelogger:*/structcLog_Logger;/*connectthelogger,andreturnsahandletoit:*/cLog_Logger*cLog_connect();/*appendsazeroterminatedstringtothelog:*

c++ - 为什么 move 返回一个右值引用参数需要用 std::move() 包装它?

我正在阅读EffectiveModernC++Item25,第172页,它有一个例子来证明,如果你想移动返回一个右值引用参数,你需要用std::move(param)包装它。由于参数本身总是一个左值,如果没有std::move(),它将被复制返回。我不明白。如果std::move(param)只是将它接收的参数转换为右值引用,那么当param已经是右值引用时有什么区别?像下面的代码:#include#include#includetemplateclassTD;classWidget{public:explicitWidget(conststd::string&name):name(n

c++ - C++ 库的 C 包装器——继承呢?

所以我读了DevelopingCwrapperAPIforObject-OrientedC++code我喜欢我在我的库中采用的方法——每个对应的C++类的不透明句柄;避免使用void*但现在,我面临着“接口(interface)”和基类的思考。例如,我有一个“channel”类的类层次结构——“channel”的基类和派生的具体类,例如串行通信、内存缓冲区、套接字等。所以我有:typedefstructserial_channelserial_channel;typedefstructsocket_channelsocket_channel;typedefstructmemory_ch

c++ - 使用尽可能少的代码将非静态方法包装到带有 "this"参数绑定(bind)的 std::function

这是我正在尝试做的事情:templateclassCSignal{public:voidconnect(std::functiontarget){m_connections.emplace_back(target);}private:mutablestd::vector>m_connections;};connect非常适合静态方法或全局函数。现在,如果我想传递一个成员方法怎么办?看来这是我唯一的选择:structMyStruct{voidprint(floata,intb){std::cout如果我不必指定非常麻烦的占位符,它会适合我。所以我尝试另一种方法。我为成员方法添加了一个新的

c++ - SWIG:仅使用 header 和共享库为 Perl 包装 C++,无法定位可加载对象错误

我正在尝试学习SWIG,但在让SWIG在Linux机器上使用perl时遇到了一些问题。我有文件Dog.h、Crow.h、Animal.i和libmylib.so。所有这些文件都在同一个目录中。libmylib.so是使用Dog.cpp和Crow.cpp编译的,它们分别引用Dog.h和Crow.h。我的Animal.i文件如下:%moduleAnimal%{/*Includestheheaderinthewrappercode*/#include"Dog.h"#include"Crow.h"%}/*Parsetheheaderfiletogeneratewrappers*/%includ

c++ - 如何为动态加载编写 MPI 包装器

由于MPI不提供二进制兼容性,仅提供源代码兼容性,因此我们不得不将我们的求解器源代码发送给客户,以便他们将我们的求解器与他们首选的MPI版本一起使用。好吧,我们已经到了无法再提供源代码的地步。因此,我正在寻找围绕MPI调用创建包装器的方法。我们的想法是为我们提供stub函数的header,用户将编写实现,从中创建一个动态库,然后我们的求解器将在运行时加载它。但是解决方案并不“优雅”并且容易出错。因为有struct参数(例如,MPI_Request),其struct定义可能因一个MPI实现而异,我们需要接受(void*)用于我们的许多stub参数。此外,如果一个MPI与另一个MPI的参数

c++ - 是否有标准的静态函数包装器类型模板?

我正在寻找一个标准的C++14类型模板,它静态地(在编译时)嵌入一个函数引用作为模板参数,并将operator()实现为对引用函数的转发调用.我知道std::function存在,但它存储一个函数指针作为数据成员。我希望将函数引用嵌入到类型签名中,以便包装器类型为空和默认构造。我有一个有效的实现(带有示例用例):#include#include#include//Implementation:templatestructfn_t{templatestructfn_ref{Retoperator()(Args&&...args)const{returnFunc(std::forward(

c++ - 将 C 对象数组包装到 C++ 类中

我有带有这样API的C库:extern"C"{typedefstructOpaqueOpaque;Opaque*foo_new();voidfoo_delete(Opaque*);intfoo_f(Opaque*,int);}为了简化它的使用,我将它包装成这样:classFoofinal{public:Foo(){self_=foo_new();}~Foo(){foo_delete(self_);}//codeforcopy/moveconstructorandoperator=intf(inta){returnfoo_f(self_,a);}private:Opaque*self_;

c++ - 完全面向对象的 C++ SQL 包装器?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭8年前。Improvethisquestion所以我正在寻找C++的SQL包装器,它可以完全隐藏任何文本SQL语句。我似乎找不到任何东西,我想知道为什么所有包装器似乎在某个时候都希望您编写文本SQL语句,例如:SELECT*FROMstockWHEREitem='HotdogBuns'这里以MySQL++为例:mysqlpp::Queryquery=conn.query("select*fromstockwher

c++ - 设计迭代器包装器

我编写了一个包装迭代器并按需返回转换后值的类://iterator-wrapper.htemplateclassIteratorWrapper{Itercur_;constIterlast_;constFctfct_;public:IteratorWrapper(Iterfirst,Iterlast,constFctfct):cur_(first),last_(last),fct_(fct){}constValValue()const{returnfct_(*cur_);}voidNext(){++cur_;}boolDone()const{returncur_==last_;}};现