Информация об изменениях

Сообщение Re[3]: variadic list неспециализированных шаблонов от 20.09.2014 22:30

Изменено 20.09.2014 22:32 wander

Здравствуйте, niXman, Вы писали:

X>если таки не получится разобраться — выложу компилябильный код. просто прототипирую некоторую архитектуру, о которой скоро на хабре будет статья, потому и не хочу "раскрывать всех карт"


Может я конечно опять не так понял (плоховато уже соображаю), но вот так не пойдет?

X>
X>template<template<typename> class ...>
X>struct invokers;
X>template<typename...>
X>struct services;

X>template<
X>     typename UC
X>    ,template<typename> class GC
X>    ,typename Invokers
X>    ,typename Services
>>
X>struct server;

X>template<
X>     typename UC
X>    ,template<typename> class GC
X>    ,template<typename> class... Invokers
X>    ,typename... Services
>>
X>struct server<UC, GC, invokers<Invokers...>, services<Services...>> {
X>    server(GC<UC> &gc)
X>        :gc(gc)
X>    {}

X>    void start() {
X>        auto ptr = std::make_shared<session<invokers<Invokers...>, services<Services...>>>();
        ptr->>invoke(1, "my string");
X>    }

X>private:
X>    GC<UC> &gc;
X>};
X>
Здравствуйте, niXman, Вы писали:

X>если таки не получится разобраться — выложу компилябильный код. просто прототипирую некоторую архитектуру, о которой скоро на хабре будет статья, потому и не хочу "раскрывать всех карт"


Может я конечно опять не так понял (плоховато уже соображаю), но вот так не пойдет?

template<template<typename> class ...>
struct invokers;
template<typename...>
struct services;

template<
     typename UC
    ,template<typename> class GC
    ,typename Invokers
    ,typename Services
>
struct server;

template<
     typename UC
    ,template<typename> class GC
    ,template<typename> class... Invokers
    ,typename... Services
>
struct server<UC, GC, invokers<Invokers...>, services<Services...>> {
    server(GC<UC> &gc)
        :gc(gc)
    {}
>    void start() {
        auto ptr = std::make_shared<session<invokers<Invokers...>, services<Services...>>>();
                ptr->invoke(1, "my string");
    }

private:
    GC<UC> &gc;
};