草庐IT

内包装

全部标签

c++ - 使用普通函数删除器构建 std::unique_ptr 的包装器

我正在尝试实现一个可以像这样使用的std::unique_ptr工厂:autofd=my_make_unique(fopen("filename","r"));即,将删除函数作为模板参数传递。我在C++11中的最佳尝试是:templatestructDeleter{voidoperator()(P*ptr){deleter(ptr);}};templatestd::unique_ptr>my_make_unique(P*ptr){returnstd::unique_ptr>(ptr);}在C++14中它更简洁:templateautomy_make_unique(P*ptr){stru

c++ - 使用智能指针包装 C 创建和销毁函数

我有一些处理对象创建和销毁的CAPI,它提供了:createObject(...)和destroy(...)。我想把它包装成一些更现代的构造/销毁机制,并将它们与智能指针一起使用。我担心在某个时候我会忘记销毁对象,或者会发生一些异常。我知道shared_ptr的自定义删除函数,但我不能显式调用new,因为createOjbect函数处理初始化。我可以在这种情况下使用STL智能指针吗?在这种情况下,我是否必须从头开始实现一个在构造函数中初始化、在析构函数中析构和引用计数的类? 最佳答案 std::shared_ptr完全有能力使用cu

c++ - 用 boost.python 包装结构列表

我有一个返回结构列表的C++函数。在结构内部,还有更多的结构列表。structCameraInfo{CamNamename;std::listlImgFormats;std::listlCamControls;};std::listgetCameraInfo(){std::listlCamerasInfo;//filllCamerasInforeturnlCamerasInfo;}然后为了导出它,我使用了:class_>("CameraNode",no_init).......def("listCameraInfo",make_function(&CameraNode::listCam

c++ - 在 C++ 中,如何使用后备包装默认 header

假设我的代码使用std::array,我想这样做:文件:数组#pragmaonce#ifdefMY_TOOLSET_HAS_STD_ARRAY#include//recursiveincludehere?#else#includenamespacestd{usingboost::array;}#endif这样我的项目就可以使用std::array而无需关心编译器/平台。一个问题(至少)是当std::array可用时,include将是递归的,而我真正想要的是(语义上)“包含如果这个include不存在就会包含的header”。关于如何做到这一点有什么想法吗?我知道将boost::arr

c++ - 用 c 包装一个 c++ 库? (不要 "extern c")

是否可以将c++库包装到c中?我该怎么做?有现成的工具吗?(需要访问现有的c++库,但只能使用C) 最佳答案 您可以用C编写面向对象的代码,因此如果它是面向对象的C++库,则可以将其包装在C接口(interface)中。然而,这样做可能会非常乏味,尤其是当您需要支持继承、虚函数和诸如此类的东西时。如果C++库采用通用编程(模板),它可能会变得非常棘手(您需要提供所有需要的模板实例)并很快接近不值得这样做的地步。假设它是OO,下面是如何在C中实现OO的基本草图:C++类:classcpp{public:cpp(inti);voidf(

c++ - 可以包装或合并单独的 namespace 吗?

我似乎记得在某处看到有关将多个命名空间合并为一个方法的注释。现在,寻找所说的笔记我没有找到它们——即使使用搜索词组合、分组、合并和包装进行搜索,我也没有找到任何东西。也许我误解了我之前看到的内容。我没有这方面的具体应用,这只是一种好奇心,有点做作。但是,从两个namespace开始......namespacea{intfunc(){return1;}}namespaceb{intfunc(){return2;}}我一直在寻找语法来简单地将它们包装在另一个名称中——事后——(是的,我知道我可以用嵌套的方式重写它)或者将它们合并到一个新的空间中。但是,我确实发现,如果我添加到其中一个非常

c++ - shared_ptr<T[]> 包装动态数组的问题

我想用std::shared_ptr替换我类(class)中的一些原始指针这样我在创建该类的拷贝时就不必担心了。但是原始指针指向一个动态数组。当你给它一个自定义删除器时,使用带有动态数组的shared_ptr是可能的,例如。G。default_delete.但是当我尝试为该字段分配一个新值时,我会得到一个很大的错误列表,即使是在构建时也是如此。这是一个最小的代码示例:#include#includeusingnamespacestd;templateshared_ptrmake_shared_array(size_tsize){returnshared_ptr(newT[size],d

c# - 如何有效地包装固定大小的循环缓冲区的索引

我有一个固定大小的循环缓冲区(作为数组实现):初始化时,缓冲区会填充指定的最大数量的元素,这允许使用单个位置索引来跟踪我们当前的位置圆圈。访问循环缓冲区中元素的有效方法是什么?这是我目前的解决方案:intGetElement(intindex){if(index>=buffer_size||index=buffer_size?(index+end_index)-buffer_size:end_index+index;}returnbuffer[index];}一些定义:end_index是紧跟在圆圈中最后一个元素之后的元素的索引(它也被认为与start_index相同,即圆圈的第一个元

c++ - 用 SWIG 包装模板模板参数类

我有一个如下所示的C++类:templateclassContainerType,typenameMemberType>classMyClass{public:MyClass(ContainerType*volData);}我正在尝试用SWIG包装它。我的MyClass.i看起来像:%moduleMyClass%{#include"SimpleContainer.h"#include"MyClass.h"%}%include"SimpleContainer.h"%include"MyClass.h"%template(MyClass_SimpleContainer_Int)MyClas

python - 如何使用 pybind11 包装模板类

我有一个类似于下面的类结构,其中我有两个类型A和B,它们具有相似的签名,只是参数/返回类型不同。然后我使用一个类模板来处理这两个类,在Python中实现ducktyping的静态变体。现在我想使用pybind11将此代码包装到Python中,我希望在其中使用标准的动态ducktyping获得一个采用两种类型的类。我该怎么做?我基本上是在寻找一种方法来禁用pybind11中的严格类型检查或指定多种类型以便同时接受TypeA和TypeB。下面示例的定义方式,只有TypeA通过检查。由于函数签名不同,我也无法将A和B统一为一个基类。#include#includeclassTypeA{pub