我目前正在用 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()
可以接受任意数量的参数。是否有可以做到这一点的通用指针类型(它不必是可执行的,只是当我重复将相同的函数推送到队列时相同)?