Python с оператором на C++

Я пытаюсь реализовать что-то похожее на python с оператором на С++. Поскольку я планирую использовать его в основном с Qt -OpenGL, методы называются bindиrelease(в питоне __enter__,__exit__).

Код, который я придумал:

заголовок:

#include 
#include 

class With
{
public:
    class A
    {
    public:
        virtual ~A() { }
    };

    template 
    class B : public A
    {
    public:
        B(T& _t) : t(_t)
        {
            t.bind();
        }

        virtual ~B()
        {
            t.release();
        }

        T& t;
    };

    template 
    With(Args&... args)
    {
        set(args...);
    }

    ~With();

    template 
    void set(T& t, Args&... args)
    {
        set(t);
        set(args...);
    }

    template 
    void set(T& t)
    {
        a.push_back(dynamic_cast(new B(t)));
    }

    std::vector a;
};

cpp:

With::~With()
{
    for (auto it = a.begin(); it != a.end(); ++it)
    {
        delete *it;
    }
}

Использование:

class X
{
public:
    void bind() { std::cout << "bind x" << std::endl; }
    void release() { std::cout << "release x" << std::endl; }
};

class Y
{
public:
    void bind() { std::cout << "bind y" << std::endl; }
    void release() { std::cout << "release y" << std::endl; }
};

int main()
{
    X y;
    Y y;

    std::cout << "start" << std::endl;
    {
        With w(x, y);
        std::cout << "with" << std::endl;
    }

    std::cout << "done" << std::endl;

    return 0;
}

Вопросы:

  1. Требование class Aи class Bкажется немного неуклюжим. Есть ли лучшая альтернатива?
  2. Есть ли недостатки в использовании &&вместо &? Это сделало бы возможным использование временных объектов (, например.With w(X(), y);)

10
задан tauran 15 July 2012 в 11:31
поделиться