相关疑难解决方法(0)

`std :: nullptr_t`类型的用途是什么?

我了解到nullptr,除了可转换为任何指针类型(但不是任何整数类型)之外,还有自己的类型std::nullptr_t.因此可以接受一个方法重载std::nullptr_t.

究竟为什么需要这样的过载?

c++ nullptr c++11

19
推荐指数
2
解决办法
4951
查看次数

C++ lambda运算符==

如何比较C++中的两个lambda函数(Visual Studio 2010)?

std::function<void ()> lambda1 = []() {};
std::function<void ()> lambda2 = []() {};
bool eq1 = (lambda1 == lambda1);
bool eq2 = (lambda1 != lambda2);
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误,声称operator ==无法访问.

编辑:我正在尝试比较函数实例.所以lambda1 == lambda1应该返回true,而lambda1 == lambda2应该返回false.

c++ lambda

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

std :: function作为回调,是否可以取消注册?

问题严格关注std::function而非关键boost::function.有关详细信息,请参阅此问题底部的" 更新"部分,尤其是有关无法std::function根据C++ 11标准比较非空对象的部分.


C++ 11 std::function类模板非常适合维护一组回调.vector例如,可以将它们存储在a中,并在需要时调用它们.但是,维护这些对象并允许取消注册似乎是不可能的.

让我具体一点,想象一下这堂课:

class Invoker
{
public:
  void Register(std::function<void()> f);
  void Unregister(std::function<void()> f);

  void InvokeAll();

private:
  // Some container that holds the function objects passed to Register()
};
Run Code Online (Sandbox Code Playgroud)

示例使用场景:

void foo()
{
}

int main()
{
  std::function<void()> f1{foo};
  std::function<void()> f2{[] {std::cout << "Hello\n";} };

  Invoker inv;

  // The easy part

  // Register callbacks
  inv.Register(f1);
  inv.Register(f2);

  // Invoke them
  inv.InvokeAll();

  // The seemingly impossible part. How can …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

比较两个boost :: function

void ff(int){} 

void Unscribe(const boost::function<void(int)>& f)
{
    std::map<int, boost::function<void(int)> > map;

    map[0] = ff;

    if( map[0] == f)
    {

    }  
}

Unscribe( ff ); 
Run Code Online (Sandbox Code Playgroud)

我希望能够将两个boost :: function与相同的签名进行比较.我应该修改什么才能使这段代码可编辑?

c++ boost

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

在容器中存储boost :: function对象

我有一个KeyCallbacks 的向量:

typedef boost::function<void (const KeyEvent&)> KeyCallback
Run Code Online (Sandbox Code Playgroud)

我用它来存储按下键盘按钮时的所有监听器.我可以添加它们并将事件发送到所有回调for_each,但我不知道如何KeyCallback从我的向量中删除特定的签名.

例如,我想要这样的东西:

void InputManager::UnregisterCallback(KeyCallback callback) {
  mKeyCallbacks.erase(std::find(mKeyCallbacks.begin(), mKeyCallbacks.end(), callback));
}
Run Code Online (Sandbox Code Playgroud)

根据boost::function文档(见这里),没有比较函数对象的东西,这可以解释我上面的问题.我被困了吗?这有什么好办法吗?

(我读到boost::signals了回调机制,但它显然很慢,我希望回调可能会在一帧内被解雇几次.)

c++ boost boost-function

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

标签 统计

c++ ×5

boost ×2

c++11 ×2

boost-function ×1

lambda ×1

nullptr ×1