草庐IT

c++ - C++ 的 C 包装器

我想使用PureData作为我自己的库的原型(prototype)设计工具。我发现PureData补丁是用C编写的,但我的库是用C++编写的。那么如何在纯数据中使用此代码?由于我没有使用纯C,我想知道如何为C++类编写C包装器以及如何实例化我的类?还是我必须用C重写所有内容? 最佳答案 您需要为每个需要调用的函数编写包装函数。例如://TheC++implementationclassSomeObj{voidfunc(int);};extern"C"{SomeObj*newSomeObj(){returnnewSomeObj();}

c++ - reference_wrapper 和 std::ref 是如何工作的?

我正在尝试了解std::ref的工作原理。#include#includetemplatevoidfunc(Cc){c+=1;}intmain(){intx{3};std::cout在上面的代码中,我认为模板参数C第三个函数调用被实例化为std::reference_wrapper.阅读时thereference,我注意到没有+=std::reference_wrapper中的运算符.那么,c+=1;怎么样?有效吗? 最佳答案 howisc+=1;valid?因为reference_wrapper可隐式转换为int&通过其转换运算符

c++ - reference_wrapper 和 std::ref 是如何工作的?

我正在尝试了解std::ref的工作原理。#include#includetemplatevoidfunc(Cc){c+=1;}intmain(){intx{3};std::cout在上面的代码中,我认为模板参数C第三个函数调用被实例化为std::reference_wrapper.阅读时thereference,我注意到没有+=std::reference_wrapper中的运算符.那么,c+=1;怎么样?有效吗? 最佳答案 howisc+=1;valid?因为reference_wrapper可隐式转换为int&通过其转换运算符

c++ - 从 C++ 生成 C 包装器?

我想从C++库生成C包装器。有关于如何手工操作的教程:http://dsc.sun.com/solaris/articles/mixing.htmlhttp://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html但是这太费体力了。例如,对于这个:structRtAudio{virtualDeviceInfoconst&f(){...}classDeviceInfo{virtualvoidg(){...}};...};我需要写:structRtAudioC{RtAudiox;};structDeviceInfo{RtAudio::De

c++ - 从 C++ 生成 C 包装器?

我想从C++库生成C包装器。有关于如何手工操作的教程:http://dsc.sun.com/solaris/articles/mixing.htmlhttp://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html但是这太费体力了。例如,对于这个:structRtAudio{virtualDeviceInfoconst&f(){...}classDeviceInfo{virtualvoidg(){...}};...};我需要写:structRtAudioC{RtAudiox;};structDeviceInfo{RtAudio::De

c++ - tr1::reference_wrapper 有什么用?

最近我一直在阅读ScottMeyers的优秀EffectiveC++书。在最后一个技巧中,他介绍了TR1的一些功能——我通过Boost了解了其中的许多功能。但是,有一个我绝对不认识:tr1::reference_wrapper。我将如何以及何时使用tr1::reference_wrapper? 最佳答案 据我所知,这就像boost::ref。基本上,可以复制的引用。在绑定(bind)到需要通过引用传递参数的函数时非常有用。例如(使用boost语法):voidIncrement(int&iValue){iValue++;}intiVa

c++ - tr1::reference_wrapper 有什么用?

最近我一直在阅读ScottMeyers的优秀EffectiveC++书。在最后一个技巧中,他介绍了TR1的一些功能——我通过Boost了解了其中的许多功能。但是,有一个我绝对不认识:tr1::reference_wrapper。我将如何以及何时使用tr1::reference_wrapper? 最佳答案 据我所知,这就像boost::ref。基本上,可以复制的引用。在绑定(bind)到需要通过引用传递参数的函数时非常有用。例如(使用boost语法):voidIncrement(int&iValue){iValue++;}intiVa

c++ - SFINAE 适用于扣除但因替代而失败

考虑以下MCVEstructA{};templatevoidtest(T,T){}templateclassWrapper{usingtype=typenameT::type;};templatevoidtest(Wrapper,Wrapper){}intmain(){Aa,b;test(a,b);//workstest(a,b);//doesn'tworkreturn0;}这里test(a,b);作品和test(a,b);失败::11:30:error:notypenamed'type'in'A'usingtype=typenameT::type;~~~~~~~~~~~~^~~~:2

c++ - SFINAE 适用于扣除但因替代而失败

考虑以下MCVEstructA{};templatevoidtest(T,T){}templateclassWrapper{usingtype=typenameT::type;};templatevoidtest(Wrapper,Wrapper){}intmain(){Aa,b;test(a,b);//workstest(a,b);//doesn'tworkreturn0;}这里test(a,b);作品和test(a,b);失败::11:30:error:notypenamed'type'in'A'usingtype=typenameT::type;~~~~~~~~~~~~^~~~:2

c++ - 在容器中使用 reference_wrapper 而不是原始指针的好处?

使用std::reference_wrapper有什么好处作为容器的模板参数而不是原始指针?即std::vector>与std::vector我喜欢忘记空值并且不必使用指针语法,但是类型的冗长(即vector>)加上调用站点使用std::ref来包装实际引用让我认为它不值得它。我指的是不能使用std::shared_ptr或任何其他智能指针的情况。使用reference_wrapper或我目前未考虑的任何其他因素还有其他好处吗?(我认为我的问题适用于C++11的reference_wrapper和boost's) 最佳答案 我认为没