小编Phi*_*uil的帖子

没有动态分配的哈希表/地图实现

有谁知道动态分配内存的C/C++哈希表/映射实现?我正在研究一个没有标准库而且没有堆的嵌入式系统(除非我想写/端口一个).

c c++ embedded hashtable hashmap

11
推荐指数
1
解决办法
2100
查看次数

我可以用事件,互斥体和信号量实现公平的"等待多个事件"吗?

在只有事件[1],互斥体和信号量[2]的平台上,我可以创建一个公平的"等待多个事件"实现,当任何事件[3]被发出信号/设置时返回.我假设现有的原语是公平的.

[1]事件是一个"标志",有4个操作:Set(),Clear(),Wait()和WaitAndClear().如果你在一个未设置的事件上等待(),你就会阻塞,直到某人Set()为止.WaitAndClear()听起来像是原子的.所有的服务员都被唤醒了.

[2]我不相信系统支持信号量值变为负值.

[3]我说"事件",但它可能是一个使用任何这些原语的新对象类型.

c c++ multithreading mutex semaphore

6
推荐指数
1
解决办法
1036
查看次数

什么是在C++ 03中模拟=删除以限制复制/赋值操作的最简单方法?

C++ 11通过允许您使用"= delete"语法将隐式编译器定义的方法标记为verboten来解决长期困扰我的问题. 维基百科了解更多信息.

class Foo
{
public:
     Foo();
    ~Foo();

    // No copy
    Foo(Foo const &) = delete;
    Foo& operator=(Foo const &) = delete;
};
Run Code Online (Sandbox Code Playgroud)

我不希望复制或分配的类的复制和赋值运算符总是很难搞乱.这是一个很大的锅炉板代码,使它们成为私有的,然后通常会有成员数据,没有一个默认的构造函数,需要一些挥手让编译器对你想要没有人调用的函数感到高兴.

class Bar
{
public:
   explicit Bar(UniqueResourceID id): m_data(id) { }
   ~Bar();

protected:
   SomeHandle  m_data; // no default constructor

// all this crap to keep from being able to copy.  Do not use any of these!!
private:
   Bar() { } // ERROR: m_data has no default constructor
   static UniqueResourceID s_invalidID; // now I'm making the …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor c++03 c++98

3
推荐指数
1
解决办法
304
查看次数

如何禁用隐式 Lamba 变量捕获?

如何禁用隐式 lambda 变量捕获?

例如,如果我有一个正在对数组中的每个条目进行调用的 lambda,并且我不想捕获任何变量,那么如何禁用隐式捕获?我更喜欢使用显式捕获列表,因为这意味着我只抓取我认为我正在抓取的内容。


事实证明,我对捕获的工作原理完全错误[]。以防万一将来有人发现这一点,除了上面我的(误导的)问题的已接受答案之外,这里还有一些希望有帮助的信息。

捕获列表可以通过如下方式传递:

  • [a,&b]其中 a 通过复制捕获,b 通过引用捕获。
  • [this]通过引用捕获当前对象 (*this)
  • [&]通过引用捕获 lambda 主体中使用的所有自动变量,并通过引用捕获当前对象(如果存在)
  • [=]通过复制捕获 lambda 主体中使用的所有自动变量,并通过引用捕获当前对象(如果存在)
  • []什么也没捕获

如果变量没有自动存储持续时间(即它不是本地变量或者它是静态变量或线程本地变量)或者如果它没有在 lambda 主体中使用 odr,则可以在不捕获的情况下使用该变量。

来源: http: //en.cppreference.com/w/cpp/language/lambda

换句话说,如果您想禁用隐式捕获,只需使用空括号即可[]

c++ lambda c++11

1
推荐指数
1
解决办法
613
查看次数