草庐IT

send_this_email

全部标签

c++ - 关键字 `this` 可以在类范围内使用吗?

看来我可以在类范围内定义捕获this的lambda表达式。据我阅读N4640最新的工作草案,我找不到允许该行为的句子。我想我错过了什么......这是一个例子:#include#includestructfoo{std::functionf1=[this]{++i;};inti=0;};intmain(){fooa;fooconst&cref=a;cref.f1();std::cout运行演示。(g++-std=c++11迂腐)https://wandbox.org/permlink/HPzaOxbBkOQOmuS6已更新感谢@Brian和@cpplerner的评论,我明白了我的基本问

c++ - 来自同一个 enable_shared_from_this 实例的两个 shared_ptr

鉴于这个类是enable_shared_from_this:classconnection:publicstd::enable_shared_from_this{//...};假设我从sameconnection*创建了两个std::shared_ptr实例,如下所示:std::shared_ptrrc(newconnection);std::shared_ptrfc(rc.get(),[](connectionconst*c){std::cout到目前为止一切正常,因为资源{connection*}由单个shared_ptr—rc准确地说,fc只是有一个假的删除器。之后,我这样做:a

c++ - GCC 内联汇编错误 : Cannot take the address of 'this' , 这是一个右值表达式

我仍在与GCC作斗争-编译以下内联汇编代码(使用-fasm-blocks,启用Intel风格汇编syntax)给我一个奇怪的错误Cannottaketheaddressof'this',whichisanrvalueexpression...MyClass::MyFunction(){_asm{//...movebx,this//error:Cannottaketheaddressof'this',whichisanrvalueexpression//...moveax,this//error:Cannottaketheaddressof'this',whichisanrvalueex

c++ - 替代 std::this_thread::sleep_for()

我有一个循环,我想确保它在每个循环中运行(大约)固定的时间量。我正在使用sleep_for来实现此行为,但我也希望程序能够在不完全支持标准线程库的环境中编译。现在我有这样的东西:usingnamespacestd;usingnamespacestd::chrono;//while(!quit){steady_clock::time_pointthen=steady_clock::now();//...doloopstuffsteady_clock::time_pointnow=steady_clock::now();#ifdefNOTHREADS//versionforsystemsw

c++ - decltype(*this) 等效于外部函数体

是否可以编写一个trait,它会导致使用它的类的类型?如何在下面的示例中实现get_class?classFoo{typedefget_class::typetype;//type=Foonow};注意:我必须写一个宏,它在类主体中扩展,用于多个类,所以我不能简单地写'typedefFootype;'用例:我有一个reflectable(...)宏,它生成基础设施来遍历成员,访问他们并使用他们的名字查找他们:classFoo{friendstd::ostream&operatorreflectable(...)应该是一个宏,这样我就可以将类型和成员名称作为字符串分别获取,以构建用于查找

c++ - MPL 序列 : is this legal? 的用户定义文字

能够将传递给文字运算符的字符串转换为MPL序列会很有用,因为这样我们就可以根据字符串的内容控制代码生成。以前,我认为这是不可能的,因为constexpr函数的参数在函数体内不被视为常量表达式。但是,我想出了以下在Clang3.4.2和GCC4.8.2下编译的解决方法:#include#include#includestructstring{constuintmax_tm_str[64];constsize_tm_length;templateconstexprstring(constTs...ts):m_str{(uintmax_t)ts...},m_length{sizeof...(

c++ - 使用 C+11 和 Newlib 时出现错误 "sigemptyset was not declared in this scope"

在Newlib下的Cygwin上使用sigemptyset时,我们会捕获编译器错误。该错误发生在C++编译器中,但仅在使用-std=XXX时才会发生。如果没有标准选项,测试程序将按预期编译和执行。下面是测试程序,后面是感兴趣的Cygwin头文件。我在Cygwinheader中没有看到任何可疑的内容。我尝试过像#define_GNU_SOURCE和#define_XOPEN_SOURCE700这样的技巧。我还尝试过使用全局和std命名空间等技巧。相关见Whatdoes-D_XOPEN_SOURCEdo/mean?和Namespaceissuesinc++11?.编译失败的原因是什么,我该

c++ - 在 'this' 指针上使用 placement new 是否安全

当前实现我有一个包含unique_ptr字段的类,这些字段相互依赖:classResourceManager{ResourceManager(){}ResourceManager(A*a_ptr):b_ptr(newB(a)),c_ptr(newC(b_ptr.get())){}ResourceManager&operator=(ResourceManager&&that){//Calldestructor,thenconstructanewinstanceontop~ResourceManager();ResourceManager*new_this=new(this)Resourc

c++ - 这个技巧是否会使在构造函数 'just work' 中调用 shared_from_this() 变得危险?

C++专家的问题。我们都知道在类构造函数中调用shared_from_this()会导致bad_weak_ptr异常,因为尚未创建实例的shared_ptr。为了解决这个问题,我想到了这个技巧:classMyClass:publicstd::enable_shared_from_this{public:MyClass(){}MyClass(constMyClass&parent){//Createatemporarysharedpointerwithanull-deleter//topreventtheinstancefrombeingdestroyedwhenit//goesouto

c++ - std::vector::assign/std::vector::operator=(const&) 是否保证重用 `this` 中的缓冲区?

如果我将一个vector分配或复制到另一个vector(其容量与前者的大小相同或更大),我可以假设后者的缓冲区将被重用吗?下面的例子证明我可以,但是,标准保证吗?std::vector::assign和std::vector::operator=在这方面的行为有什么不同吗?#include#include#includeintmain(){std::vectora{1,2,3,4,5};std::vectorb{1,2,3,4};std::vectorc{1,2,3,4,5,6,7,8,9,10};std::coutLiveexample.更新:Thisanswer提到voidassi