我正在尝试用一个模板类替换我所有的“获取/发布”RAII类(目前我有一个用于各种资源的类)。获取的一般形式是获取()、获取(P1)、获取(p1、p2)等类型。但是,如果使用参数获取资源,则需要使用这些相同的参数释放资源。
我认为我可以通过各种模板来实现这一点,将参数存储在一个元组中。当然,我在语法上已经堕落了。有人能帮忙吗?
#include <tuple>
template<class T, typename... Args>
class Raii
{
public:
Raii(T * s, Args&& ... a) : subect(s), arguments(a)
{
subject->Acquire(arguments);
}
~Raii()
{
subject->Release(arguments);
}
private:
T subject;
std::tuple<Args...> arguments;
};
class Framebuffer
{
public:
void Acquire() {}
void Release() {}
};
class Sampler
{
public:
void Acquire(int channel) {}
void Release(int channel) {}
};
class Buffer
{
public:
void Acquire(int target, int location) {}
void Release(int target, int location) {}
};
int main(void)
{
Framebuffer f;
Sampler s;
Buffer b;
auto b1 = Raii(&f);
{
auto b2 = Raii(&s, 10);
{
auto b3 = Raii(&b, 10, 20);
{
}
}
}
return 0;
}发布于 2015-09-24 12:02:55
https://stackoverflow.com/questions/32760643
复制相似问题