首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用各种模板获取/发布RAII模式

使用各种模板获取/发布RAII模式
EN

Stack Overflow用户
提问于 2015-09-24 11:53:49
回答 1查看 225关注 0票数 5

我正在尝试用一个模板类替换我所有的“获取/发布”RAII类(目前我有一个用于各种资源的类)。获取的一般形式是获取()、获取(P1)、获取(p1、p2)等类型。但是,如果使用参数获取资源,则需要使用这些相同的参数释放资源。

我认为我可以通过各种模板来实现这一点,将参数存储在一个元组中。当然,我在语法上已经堕落了。有人能帮忙吗?

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2015-09-24 12:02:55

我敢肯定会有这样的魔力:

代码语言:javascript
复制
subject->Acquire(a...);

因为a是一个模板包,所以您需要为调用展开它。

将元组扩展为各种类型的调用需要 expansion

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32760643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档