C++. How to define template parameter of type T for class A when class T needs a type A template parameter?

Posted by jaybny on Stack Overflow See other posts from Stack Overflow or by jaybny
Published on 2012-12-19T22:28:00Z Indexed on 2012/12/19 23:03 UTC
Read the original article Hit count: 208

Executor class has template of type P and it takes a P object in constructor. Algo class has a template E and also has a static variable of type E. Processor class has template T and a collection of Ts.

Question how can I define Executor< Processor<Algo> > and Algo<Executor> ? Is this possible? I see no way to defining this, its kind of an "infinite recursive template argument"

See code.

template <class T>
class Processor { 
    map<string,T> ts;
    void Process(string str, int i)
    {
        ts[str].Do(i);
    }
} 

template <class P>
class Executor {
    Proc &p;
    Executor(P &p) : Proc(p) {}

    void Foo(string str, int i) {
        p.Process(str,i);
    }

    Execute(string str)
    {
    }
} 

template <class E>
class Algo
{
    static E e;

    void Do(int i) {}
    void Foo()
    {
        e.Execute("xxx");
    }
}

main ()
{
    typedef Processor<Algo> PALGO; // invalid
    typedef Executor<PALGO> EPALGO;
    typedef Algo<EPALGO> AEPALGO;

    Executor<PALGO> executor(PALGO());
    AEPALGO::E = executor;
}

© Stack Overflow or respective owner

Related posts about c++

Related posts about templates