草庐IT

c++ - 模板、函数指针和 C++0x

我为了解C++0x的某些特性而进行的个人实验之一:我正在尝试将函数指针传递给模板函数以执行。最终执行应该发生在不同的线程中。但是对于所有不同类型的函数,我无法使模板正常工作。#includeintfoo(void){return2;}classbar{public:intoperator()(void){return4;};intsomething(inta){returna;};};templateintfunc(C&&c){//typedeftypenamestd::result_of::typeresult_type;typedeftypenamestd::conditional

c++ - 指针数组,如 (*(volatile unsigned long *)0x40004000)

我很难弄清楚如何解决以下问题。我在一个内存很少的嵌入式系统上,想尽量减少内存使用。指针总是让我感到困惑,而且将永远如此。我有一大堆寄存器地址的定义:#defineGPIO_PORTA_BASE(*((volatileunsignedlong*)0x40004000))#defineGPIO_PORTB_BASE(*((volatileunsignedlong*)0x40005000))//etc..这些寄存器可直接访问。例如:GPIO_PORT_BASE&=0x01;我需要的是一个包含上述寄存器的数组,以便我可以轻松地将它们映射到索引。例如:not_sure_what_to_decla

C++0x 原子模板实现

我知道在Intel的TBB中存在类似的模板,除此之外我在google或Boost库中找不到任何实现。 最佳答案 您可以在boost中找到有关此功能实现的讨论:http://lists.boost.org/Archives/boost/2008/11/144803.php>CantheN2427-C++AtomicTypesandOperationsbeimplemented>withoutthehelpofthecompiler?No.Theydon'tneedtobeintrinsicsifyoucanwriteinlineass

C++0x 性能改进

允许编写更高效的C++代码的C++0x改进之一是unique_ptr智能指针(太糟糕了,它不允许像操作一样通过memmove()移动:该提案没有纳入草稿)。即将发布的标准还有哪些其他性能改进?以下面的代码为例:vectorv(10,"astring");stringconcat=accumulate(v.begin(),v.end(),string(""));代码将连接vectorv中包含的所有字符串。这段简洁的代码的问题在于accumulate()复制了一些东西,并且没有使用引用。每次调用plus运算符时,string()都会重新分配。因此,与优化良好的类比C代码相比,该代码的性能较

c++ - enable_shared_from_this(c++0x): what am I doing wrong?

我只是在研究即将推出的新C++标准中的智能指针。但是我没有掌握shared_from_this函数的用法。这是我所拥有的:#include#includeclassCVerboseBornAndDie2:publicstd::enable_shared_from_this{public:std::stringm_Name;CVerboseBornAndDie2(std::stringname):m_Name(name){std::coutp=vbad->shared_from_this();}并在行中抛出std::bad_weak_ptr异常std::shared_ptrp=vbad-

支持 C++0x 功能的 C++ 编译器?

哪里有支持C++0x特性的C++编译器? 最佳答案 GCC支持其中的一部分。参见here. 关于支持C++0x功能的C++编译器?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/657511/

c++ - 编译器支持即将推出的 C++0x

是否有对新的C++0x有良好支持的编译器?我使用GCC,但不幸的是,当前版本4.4对新功能的支持很差。 最佳答案 Apache标准C++库项目维护awikipageofmajorcompilers'C++0xsupport.以下是描述其C++0x支持的供应商页面的链接:GCCCodeGearC++Builder2009IntelC++CompilerVisualC++2009和2010-参见here,here,或hereComeauC++ 关于c++-编译器支持即将推出的C++0x,我们

C++0x Lambda 到 VS 2010 中的函数指针

我正在尝试使用lambda代替函数指针传递,但VS2010似乎无法转换它。我试过像这样使用std::function但它崩溃了,我不知道我这样做是否正确!#include#include#include#include#includevoidmain(){std::functionf=[](void*)->void{std::cout(),0);getch();}令我感到奇怪的是,编译器无法将这样的lambda转换为简单的函数指针,因为它不捕获任何变量-即使它捕获了变量,我也想知道可以做什么。每个lambda的类型是否唯一?所以我可以修改一个模板函数,使用lambda的类型作为模板参数

c++ - 无法创建其中包含空元组的一元元组 (c++0x)

我在试验元组时遇到了创建元组的问题。代码示例如下。//a.cpp#includeusingnamespacestd;intmain(){autote=make_tuple();//thislineisokautotte=make_tuple(te);//thislinegivesanerror.return0;}我用g++4.5(g++-std=c++0xa.cpp)和MSVC++2010编译了它。两个编译器都在main()的第二行给我一个错误。我的问题是:由于“te”是一个定义明确的变量,为什么不能创建另一个以te为内容的元组。这个语义正确吗?我想这是一种边界情况,但如果算术正确,应

constexpr 和返回模板函数的 C++0x 错误

我试图找到问题的解决方案C++templatenon-typeparametertypededuction,它不涉及调用f的模板参数,而是隐式地为模板参数选择正确的类型。因为constexpr应该保证一个函数只包含编译时常量,并且在编译时被评估(至少我认为它是这样做的),我认为它可能是这个问题的解决方案.所以我想到了这个:templatevoidf(){}//firstitriedthis:templateautoget_f(Tt)->decltype(&f){returnf;}//secondtry:templateconstexprvoid(&get_f(Tt))(){return