【发布时间】:2012-11-29 09:32:58
【问题描述】:
我目前正在用 C++x0 编写一个方法执行队列。我已经实现并验证了基本队列机制,但想通过一个选项来修改它,让push() 自动删除所有以前对特定方法的调用:
queue.push(this, &Obj::foo, 1);
queue.push(this, &Obj::foo, 2);
queue.push(this, &Obj::foo, 3);
应该和仅仅调用一样
queue.push(this, &Obj::foo, 3);
到目前为止,我的代码如下所示:
队列.h:
#pragma once
#include <functional>
#include <vector>
using std::vector;
using std::function;
using std::bind;
class Queue
{
private:
struct functioncall {
std::function<void()> call;
};
vector<functioncall> queue;
public:
Queue();
~Queue();
template<typename T, typename F, typename... Args>
int push(T, F , Args... args);
int pop();
bool empty();
size_t size();
};
template<typename T, typename F, typename... Args>
int Queue::push(T instance, F func, Args... args)
{
functioncall newelem = { bind(func, instance, args...) };
queue.push_back(newelem);
return queue.size();
}
队列.cpp:
#include "Queue.h"
Queue::Queue() : queue()
{
}
Queue::~Queue()
{
delete &queue;
}
int Queue::pop()
{
if(!queue.empty())
{
queue.front().call();
queue.erase(queue.begin());
return queue.size();
}
return 0;
}
bool Queue::empty()
{
return queue.empty();
}
size_t Queue::size()
{
return queue.size();
}
我已经准备好向量 queue 来获取一个结构,我不仅要保存 std::bind 的结果,还要保存指向被调用方法的指针,以便我可以查找该指针并删除旧的条目。
问题在于传递给push() 的函数可以采用任意数量的参数。是否有通用指针类型(它不一定是可执行的,只要我重复将相同的函数推送到队列时保持相同)可以做到这一点?
【问题讨论】:
标签: c++ c++11 function-pointers