草庐IT

内包装

全部标签

c++ - std::string 真的包装了一个 C char 数组吗?

我一直认为std::string是作为C字符数组字符串的STL包装器实现的。但是仔细观察这个设计,我注意到它没有给出任何暗示或迹象表明它是一个包裹起来的C弦。据我所知,std::string可以在内部做任何事情!当然有c_str()方法,我认为它返回了内部字符数组,但我怎么知道该方法是否没有创建一个新cchar数组从它存储在里面的任何数据并返回它?说真的,std::string是如何实现的?它(看起来)只是Cchar数组的包装器,还是其他东西?还是两者的混合?或者甚至可以有条件地成为两者? 最佳答案 ForallIknowanstd

c++ - 使用非托管接口(interface)包装托管

我有一个公开一些接口(interface)的非托管库。用户可以实现接口(interface)并将它们与自定义实现一起粘贴到库中。我想为这个库提供一个托管包装器。用托管接口(interface)包装非托管接口(interface)很容易。但就我而言,我想支持各种接口(interface)的用户实现,这意味着我需要采用接口(interface)的托管实现并使用其非托管对应项将其包装,然后再将其发送到库的非托管部分的深处。我试过类似的方法:classUnmanagedWrapper{DoSomething(){m_clr.DoSomething();}IManaged^m_clr;}但我不能

c++ - 使用 Boost.Python 设置包装类的元类

我有一个用C++定义的Event类,我使用Boost将其公开给Python。我的脚本应该派生自此类,并且我想在定义新的子类时进行一些初始化。如何设置公开的Event类的元类,以便每当Python脚本从此类派生时,元类都可以执行所需的初始化?我想避免在脚本中显式使用元类...classKeyboardEvent(Event):#ThisiswhatIwantpassclassKeyboardEvent(Event,metaclass=EventMeta):#Thisisnotagoodsolutionpass编辑:部分解决方案似乎没有办法用Boost.Python设置元类。下一个最好的事

c++ - 在 Node.js 和 v8 中调用使用包装对象作为参数的函数

我想在node.js中做类似下面的事情...vara=newA();varb=newB();//onTick应该是一个以B的实例作为参数的函数a.onTick=函数(bInst){....a.loop();意味着A有一个属性“onTick”,它是一个在循环内调用的函数。请注意,A和B被定义为C++包装函数,这里是定义voidAClass::Init(Handletarget){Localtpl=FunctionTemplate::New(New);tpl->SetClassName(String::NewSymbol("A"));tpl->InstanceTemplate()->Set

c# - 从托管包装器重定向 native DLL stdout/stderr

我有一个C#控制台应用程序,它可以P/Invoke到nativeC++dll。dll创建一些非常健谈的线程,并将它们的日志写入标准输出。问题是我的用户交互需要控制台。如何将dllstdout/stderr重定向到null? 最佳答案 我认为,为了完成这项工作,您需要构建一个nativeDLL,该DLL链接到与麻烦的DLL相同的C++运行时。然后您需要使用freopen来重定向标准输出。我的代码来源是这个答案:freopen:revertingbacktooriginalstreamC++代码如下所示:#include__declsp

C++ 日志包装器设计

我想在我的应用程序中添加一个日志。我选择了一个日志记录库,但我希望能够切换到另一个库,而不必更改任何使用日志记录的代码。因此,我需要某种足够灵活的日志包装器,以利用几乎所有底层日志库的功能。对于这种包装器的设计有什么建议吗?编辑:我必须在这个包装器中拥有的一个功能是组件标记。我希望我的算法类在其日志行之前显示“X:”,而我的管理器类在其日志行之前显示“Y:”。如何将这些标签传播到底层日志以及如何构建组件标签命名机制是这里的一个主要设计问题。 最佳答案 最好的办法是使界面尽可能简单。将日志记录用户界面与日志记录的实际实现方式完全分开。

C++11 : unique_ptr complains about incomplete type, 但是当我包装它时不是

SO上已经有很多关于unique_ptr和不完整类型的问题,但没有一个能给我一个概念来理解为什么以下内容不起作用://error:...std::pair::secondhasincompletetypetemplatestructImpl{typedeftypenamestd::unordered_map>::iteratoriter_type;std::unique_ptrptr;Impl():ptr(newiter_type()){}};intmain(){Impl();return0;}而以下是:templatestructImpl{structWrapper{typedeft

c# - 为包装 C++ 的 swig 生成的 C# 生成 doxygen 注释

我有一个用C++编写的项目,我也在其中使用swig生成一些C#包装器。C++代码使用Doxygen风格的注释来注释类和函数。是否可以让Swig获取这些doxygen注释并为C#包装器类和函数生成doxygen注释? 最佳答案 目前,SWIG根本不解析代码注释,包括Doxygen文档。几年来有一个SWIG分支正在开发中,以使SWIG能够处理Doxygen注释,但即使是目前(AFAIK)也只能将它们映射到Java和Python文档。因此,目前最好的选择是从C++源代码中提取Doxygen文档并将其插入到SWIG生成的包装器中。要了解如何

python - Cython:如何包装返回 C++ 对象的 C++ 函数?

我正在开发一个Python项目,我想在其中与已编写的C++包进行交互。由于我将在该项目的其他部分使用Cython,因此我更愿意使用Cython进行包装。简而言之,我需要包装一个函数FooBar,它返回一个自定义类类型Bar的对象。这是Bar.h:#include//Forsize_t#include/*datareturnedbyfunctionFooBar()*/classBar{public:size_tX;std::vectorY;std::vectorZ;std::vectorM;std::vectorN;};BarFooBar(conststd::vector&O,size_

c++ - 在现代 C++ 中使用 try..catch block 通过模板元编程包装任意函数调用

我想创建一些模板,基本上应该包装它的参数。参数应该是一个任意的函数调用,它通过一些带有前缀和后缀代码的模板元编程魔法被包装。我想像下面这样使用它:autoresult=try_call(some_vector.at(13));和try_call将以某种方式定义,它将try..catchblock包装在some_vector.at(13)周围。像这样:template//sometemplatemetaprogrammingmagicheretry{autovalue=//executetheparameterhere,i.e.some_vector.at(13);returnstd::