Сообщение Re[4]: Получить сигнатуру из ламбды от 13.08.2020 8:06
Изменено 13.08.2020 8:07 Barbar1an
Re[4]: Получить сигнатуру из ламбды
Здравствуйте, YuriV, Вы писали:
YV>Во-первых праметер-пак(class ...L) не нужен.
точно, это я перестарался
YV>Что ожидает в качестве темплейт-параметра CActiveDelegate?
вообще там долден быть пак аргументов, но я поменял на сигнатуру
и все равно не проходит
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> ]
например потому что у нас сигнратура const какого-то хрена
YV>Во-первых праметер-пак(class ...L) не нужен.
точно, это я перестарался
YV>Что ожидает в качестве темплейт-параметра CActiveDelegate?
вообще там долден быть пак аргументов, но я поменял на сигнатуру
template<typename S> struct CActiveDelegate
{
fastdelegate::FastDelegate<S> Function;
std::function<S> Lambda;
int Listen;
CActiveDelegate()
{
}
};
template<class X, class Y, typename...A> auto CreateActiveDelegate(Y* x, void (X::*func)(A...), int l)
{
CActiveDelegate<void(A...)> d;
d.Function = fastdelegate::FastDelegate<void(A...)>(x, func);
d.Listen = l;
return d;
}
template<class L> auto CreateLambdaDelegate(L la, int l)
{
CActiveDelegate<typename fn::traits<L>::signature> d;
d.Lambda = la;
d.Listen = l;
return d;
}
#define FunctionSubscriber(method, l) CreateActiveDelegate(this, &std::remove_pointer<decltype(this)>::type::method, l)
#define LambdaSubscriber(la, l) CreateLambdaDelegate(la, l)
template<class ...A> class CActiveEvent
{
public:
void operator += (CActiveDelegate<void(A...)> & d)
{
Subscribers.push_back(d);
}
protected:
std::list<CActiveDelegate<void(A...)>> Subscribers;
};
class A
{
void AAA(std::string &)
{
CActiveEvent<std::string &> aaa;
aaa += FunctionSubscriber(AAA, 1);
aaa += LambdaSubscriber([](std::string &){}, 2);
}
};
и все равно не проходит
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> ]
например потому что у нас сигнратура const какого-то хрена
Re[4]: Получить сигнатуру из ламбды
Здравствуйте, YuriV, Вы писали:
YV>Во-первых праметер-пак(class ...L) не нужен.
точно, это я перестарался
YV>Что ожидает в качестве темплейт-параметра CActiveDelegate?
вообще там долден быть пак аргументов, но я поменял всё на сигнатуру
и все равно не проходит
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> ]
например потому что у нас сигнратура const какого-то хрена
YV>Во-первых праметер-пак(class ...L) не нужен.
точно, это я перестарался
YV>Что ожидает в качестве темплейт-параметра CActiveDelegate?
вообще там долден быть пак аргументов, но я поменял всё на сигнатуру
template<typename S> struct CActiveDelegate
{
fastdelegate::FastDelegate<S> Function;
std::function<S> Lambda;
int Listen;
CActiveDelegate()
{
}
};
template<class X, class Y, typename...A> auto CreateActiveDelegate(Y* x, void (X::*func)(A...), int l)
{
CActiveDelegate<void(A...)> d;
d.Function = fastdelegate::FastDelegate<void(A...)>(x, func);
d.Listen = l;
return d;
}
template<class L> auto CreateLambdaDelegate(L la, int l)
{
CActiveDelegate<typename fn::traits<L>::signature> d;
d.Lambda = la;
d.Listen = l;
return d;
}
#define FunctionSubscriber(method, l) CreateActiveDelegate(this, &std::remove_pointer<decltype(this)>::type::method, l)
#define LambdaSubscriber(la, l) CreateLambdaDelegate(la, l)
template<class ...A> class CActiveEvent
{
public:
void operator += (CActiveDelegate<void(A...)> & d)
{
Subscribers.push_back(d);
}
protected:
std::list<CActiveDelegate<void(A...)>> Subscribers;
};
class A
{
void AAA(std::string &)
{
CActiveEvent<std::string &> aaa;
aaa += FunctionSubscriber(AAA, 1);
aaa += LambdaSubscriber([](std::string &){}, 2);
}
};
и все равно не проходит
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> ]
например потому что у нас сигнратура const какого-то хрена