草庐IT

unique_name

全部标签

c++ - Win32中是否有C++跨平台 "named event like the "CreateEvent()”?

我正在寻找类似于Win32世界中的CreateEvent()、SetEvent()和WaitForMultipleObjects()的东西。具体来说,这必须可以在同一台机器上跨进程访问。我们已经将Poco用于一些跨平台的东西,但我没有看到Poco::Event是我想要的。也许我遗漏了什么。编辑:解释我想做什么:我希望进程B知道进程A何时发生某些事情。这在win32中是微不足道的-每个进程/线程调用CreateEvent()并为事件命名。当发生某些事情时,进程B调用waitForXObject()并且进程A调用SetEvent()。B发出信号。同样,这在win32中很简单,但如何跨平台进

c++ - RAII、unique_ptr 和输出参数

我是一名尝试学习C++11的C#开发人员。我正在尝试使用windns.h查询DNS。我从DnsQuery()开始,读到我需要使用DnsRecordListFree()释放结果记录输出参数。C#方法可能是使用try-finallyblock来确保我无论如何都释放资源。但我了解到没有finallyblock,并且windns.h确实应该与时俱进并实现RAII兼容接口(interface)(据我了解典型的建议)。我没有等待它发生,而是尝试制作一个RAII包装器类,其析构函数调用DnsRecordListFree()并使用运算符重载转换来获取原始指针。但我对如何正确使用此句柄或指针来获取输出参

c++ - 存储部分和的二叉树 : Name and existing implementations

考虑n个正实数序列(ai)及其部分和序列(s我)。给定一个数x∊(0,sn],我们必须找到i使得si−1x≤si。也我们希望能够更改ai之一,而不必更新所有部分和。两者都可以在O(logn)时间通过使用二叉树以ai作为叶节点值,非叶节点的值是值的总和各自的child。如果n已知且固定,则树不必是自平衡的并且可以有效地存储在线性数组中。此外,如果n是2的幂,只需要2n-1个数组元素。参见Blue等人,Phys.Rev.E51(1995),pp.R867–R868对于一个应用,鉴于问题的普遍性和解决方案的简单性,我想知道这个数据结构是否有具体的名称,是否有现成的实现(最好是在C++)。我自

c++ - 具有 unique_ptr 的用户友好型 API

我正在为OpenGL实现一个简单的GUI,主要是作为我自己的练习。这个想法是有一个Gui类,其中每个实例都可以分配给不同的渲染目标(例如后台缓冲区或纹理)。GUI元素(小部件)恰好分配给Gui类的一个实例。我想在GUI中存储元素是unique_ptr的典型用例.这是我想出的:classElement{public:Element();virtual~Element();staticstd::unique_ptrcreate_unique();};classGui{public:typedefstd::unique_ptrelement_ptr;Gui();voidaddElement(

c++ std::unique_ptr 不会在 map 中编译

我目前正在尝试将std::unique_ptr存储在std::unordered_map中,但出现奇怪的编译错误。相关代码:#pragmaonce#include"Entity.h"#include#includeclassEntityManager{private:typedefstd::unique_ptrEntityPtr;typedefstd::mapEntityMap;EntityMapmap;public:/*AddsanEntity*/voidaddEntity(EntityPtr);/*RemovesanEntitybyitsID*/voidremoveEntity(i

c++ - 如何编写指针和数据为 const 的 unique_ptr

我第一次尝试编写一个基于范围的for循环来遍历unique_ptr时,我写道:std::vector>vec;//Initializevecfor(autov:vec)//error{}然后我意识到这是在尝试创建每个元素的拷贝,这对unique_ptr没有意义。所以后来我写了它作为引用:for(auto&v:vec){}在它前面添加一个const可以防止我更改指针。for(constauto&v:vec){v=nullptr;//error(good!)}要怎么写,才能让指向的数据不能改变?例如,以下代码不应编译。for(???v:vec){v->func();}classFoo{pu

c++ - std::unique_ptr 和 std::shared_ptr 之间破坏行为差异的基本原理是什么?

来自http://en.cppreference.com/w/cpp/memory/unique_ptr:IfTisderivedclass(sic)ofsomebaseB,thenstd::unique_ptrisimplicitlyconvertibletostd::unique_ptr.Thedefaultdeleteroftheresultingstd::unique_ptrwilluseoperatordeleteforB,leadingtoundefinedbehaviorunlessthedestructorofBisvirtual.Notethatstd::shared

c++ - unique_ptr、自定义删除器和零规则

我正在编写一个类,该类使用两个通过C接口(interface)创建的对象。对象看起来像:typedefstruct...foo_t;foo_t*create_foo(int,double,whatever);voiddelete_foo(foo_t*);(与bar_t类似)。因为C++11,我想将它们包装在一个智能指针中,这样我就不必编写任何特殊方法。该类将拥有这两个对象的唯一所有权,因此unique_ptr在逻辑上是有意义的......但我仍然必须编写一个构造函数:templateusingunique_ptr_deleter=std::unique_ptr;structMyClas

c++ - 在 C++ 中为类提供可访问的 "not repeat yourself"时,如何设置 "name"?

考虑以下几点:classBase{public:virtualstd::stringgetName()=0;...};classDerived1:publicBase{public:staticstd::stringgetClassName(){return("Derived1");}std::stringgetName(){return("Derived1");}...};classDerived2:publicBase{public:staticstd::stringgetClassName(){return("Derived2");}std::stringgetName(){re

c++ - std::make_unique<T[]>(size) 值初始化

是std::make_unique(1000)总是值初始化元素?好吧,我研究了实现,clang以及g++都在使用newT[size]()进行值初始化。但我找不到符合C++14/17标准的实现必须这样做。 最佳答案 如果标准库符合C++14,那么是的,它必须这样做(使用newT[size])。来自C++14§20.8.1.4[unique.ptr.create]/4:templateunique_ptrmake_unique(size_tn);Returns:unique_ptr(newremove_extent_t[n]()).