草庐IT

包装类

全部标签

c++ - 使用 GNU 链接器包装 C++ 函数

我非常喜欢GNU链接器功能来包装函数。我通常使用它来模拟,例如非确定性函数调用,如rand()。考虑以下示例,我想为giveMeANumber编写单元测试://number.cppintgiveMeANumber(){returnrand()%6+1;}我可以像这样使用GNU链接器功能包装来包装对rand的调用://test.cppextern"C"int__wrap_rand(void){return4;}voidunitTest(){assertgiveMeANumber()==5;}$g++test.cpp-otestnumber.o-Xlinker--wrap=rand有没有办

c++ - 是否可以使用 std::basic_string 作为 char* 的包装器?

我有第三方库返回由strdup(和分别是wcsdup函数)在其中创建的char*(和wchar_t*)。我想避免在代码末尾手动调用free。是否可以为std::basic_string编写一个分配器,以便它可以处理这个库返回的c字符串?理想情况下,我根本不想分配任何新内存并使用返回的内存块(字符串应该是常量)。 最佳答案 遗憾的是,std::string有自己的内存管理,不能重用分配的字符串。您可以将它们复制到std::string并立即删除它们,但这将调用您试图避免的所有行为。您可以做的是立即声明一个带有自定义删除器的unique

c++ - 为 RAII 包装 C 分配

我有这些来自库的纯C函数:structSAlloc;SAlloc*new_salloc();voidfree_salloc(SAlloc*s);有什么方法可以用C++将其包装到智能指针(std::unique_ptr)或RAII包装器中?我主要对标准库的可能性感到好奇,而无需创建自己的包装器/类。 最佳答案 是的,您可以为此重用unique_ptr。只需制作一个自定义删除器即可。structsalloc_deleter{voidoperator()(SAlloc*s)const{free_salloc(s);//whatthehec

c++ - 使用 SWIG 将 C++ <vector> 包装为 python NumPy 数组

我有一个C++库,它定义了以下(以及更多类似的)类型:typedefstd::vectorDoubleVec;typedefstd::vectorDoubleVecVec;typedefstd::vectorIntVec;typedefstd::vectorIntVecVec;我正在尝试为处理此类对象的库创建一个python接口(interface)。正如标题所述,我希望我的界面能够与C++std::vector和numpyndarray相互转换。我都看过numpy.i由numpy人和std_vector.i提供来自SWIG人。问题在于numpy.i是为处理C/C++数组(而非C++v

c++ - 当包含在另一个 vector 中时如何使用 vector 包装类?

考虑一个来自第三方库的免费函数,它需要一个std::vector作为参数:voidfoo(std::vector&);现在,我围绕这种类型编写了一个包装器,以便我可以添加成员函数。能够使用foo()对于那种类型,我添加了一个访问函数。classWrapper{private:std::vector_data;public:std::vector&data(){return_data;}conststd::vector&data()const{return_data;}//...otherstuff};这样,我仍然可以使用foo():Wrappera;foo(a.data());但现在考

c++ - libev C++ 包装器 function_thunk

voidset_(constvoid*data,void(*cb)(EV_P_ev_watcher*w,intrevents))throw(){this->data=(void*)data;ev_set_cb(static_cast(this),cb);}//functioncallbacktemplatevoidset(void*data=0)throw(){set_(data,function_thunk);}templatestaticvoidfunction_thunk(EV_P_ev_watcher*w,intrevents){function(*static_cast(w)

用于 boost/c++11 的 C++ 包装器

我不确定问题的标题是否合适。这就是问题所在。我正在编写一个使用一些c++11库功能的库。显然并非所有实现都支持这些库,因此存在可移植性问题。这里关注哪个库并不重要。一种解决方案是使用boost,它已经提供了很多c++11库。所以我的解决方案是定义一个宏,比如USE_CXX11,并定义一个新的命名空间说internal并根据宏将名称引入此内部namespace。例如说我需要使用名称foo来自C++库,也可在中找到.我做的是#ifdefUSE_CXX11#include#else#include#endifnamespaceinternal{#ifdefUSE_CXX11usingstd:

c# - 包装 C++ 以便在 C# 中使用

好了,基本上就有了一个大的C++项目(Recast)我想包装以便我可以在我的C#项目中使用它。我已经尝试这样做一段时间了,这就是我目前所做的。我正在使用C++/CLI包装我需要的类,以便我可以在C#中使用它们。但是,我的C#项目中还需要大量的结构和枚举。那么我该如何包装这些呢?我现在使用的基本方法是将dllexport调用添加到nativec++代码,编译为dll/lib,将此库添加到我的C++/CLI项目并导入c++header,然后将CLI项目编译成一个dll,最后添加这个dll作为对我的C#项目的引用。感谢您的帮助。这是一些代码..由于C++项目太大,我需要一种可管理的方式来执行

c++ - 将初始化列表包装在括号内有什么影响?

将初始化列表包含在括号内有什么影响?它只是列表初始化的另一种形式还是仅在某些情况下有效?例如,考虑a:structA{A(floata,floatb){}};intmain(){Ab(1.0f,0.0f);//Directinitalization,findsctorfor(float,float)Ac{1.0f,0.0f};//Listinitalization,findsamatchingctorAa({1.0f,0.0f});//Isthislistinitalization...whichisexpanded?} 最佳答案

c++ - 性能 : boost. 计算对比opencl C++ 包装器

以下代码分别使用boost.compute和openclc++包装器添加两个vector。结果显示boost.compute比openclc++包装器慢了近20倍。我想知道我是否错过了使用boost.compute或者它确实很慢。平台:win7、vs2013、boost1.55、boost.compute0.2、ATIRadeonHD4600代码使用c++包装器:#define__CL_ENABLE_EXCEPTIONS#include#include#include#include#include#include#includeintmain(){staticcharkernelSo