Здравствуйте, Barbar1an, Вы писали:
B>Здравствуйте, YuriV, Вы писали:
YV>>Во-первых праметер-пак(class ...L) не нужен.
B>точно, это я перестарался
YV>>Что ожидает в качестве темплейт-параметра CActiveDelegate?
B>вообще там долден быть пак аргументов, но я поменял всё на сигнатуру
B>B> template<typename S> struct CActiveDelegate
B> {
B> fastdelegate::FastDelegate<S> Function;
B> std::function<S> Lambda;
B> int Listen;
B> CActiveDelegate()
B> {
B> }
B> };
B> template<class X, class Y, typename...A> auto CreateActiveDelegate(Y* x, void (X::*func)(A...), int l)
B> {
B> CActiveDelegate<void(A...)> d;
B> d.Function = fastdelegate::FastDelegate<void(A...)>(x, func);
B> d.Listen = l;
B> return d;
B> }
B> template<class L> auto CreateLambdaDelegate(L la, int l)
B> {
B> CActiveDelegate<typename fn::traits<L>::signature> d;
B> d.Lambda = la;
B> d.Listen = l;
B> return d;
B> }
B> #define FunctionSubscriber(method, l) CreateActiveDelegate(this, &std::remove_pointer<decltype(this)>::type::method, l)
B> #define LambdaSubscriber(la, l) CreateLambdaDelegate(la, l)
B> template<class ...A> class CActiveEvent
B> {
B> public:
B> void operator += (CActiveDelegate<void(A...)> & d)
B> {
B> Subscribers.push_back(d);
B> }
B> protected:
B> std::list<CActiveDelegate<void(A...)>> Subscribers;
B> };
B> class A
B> {
B> void AAA(std::string &)
B> {
B> CActiveEvent<std::string &> aaa;
B> aaa += FunctionSubscriber(AAA, 1);
B> aaa += LambdaSubscriber([](std::string &){}, 2);
B> }
B> };
B>
B>и все равно не проходит
1>>CActiveDelegate<void (__thiscall A::AAA::<lambda_65ea410b267bfdbc362c6e23c2be9649>::* )(std::string &) const>::Function' uses undefined class 'fastdelegate::FastDelegate<S>'
1>> with
1>> [
1>> S=void (__thiscall A::AAA::<lambda_65ea410b267bfdbc362c6e23c2be9649>::* )(std::string &) const
1>> ]
B>например потому что у нас сигнратура const какого-то хрена
Так компайлер ругается на fastdelegate, а не на CreateLambdaDelegate. Зачем тебе разделять лямбды и обычные функции/методы? Пихай всё в fastdelegate/std::function. Проверь код fastdelegate, там нет к-тора для const функторов видимо. Если нельзя добавить, то сними const std::remove_const/std::remove_cv. Последнее снимает и volatile qualifier. Попробуй закомментировать
aaa += FunctionSubscriber(AAA, 1);
и скомпилить. Я этим кодом пользуюсь лет 6 наверное.