[done]с++, templates передача типа указателя на родителя.
#include <stdio.h>
class SuperStorage25;
template<class StorageType>
class Connection;
template<class EventType, class ConnectionType>
class BaseEvent
{
public:
EventType handler;
void event(void* p, ssize_t s)
{
handler.event(p,s);
};
// many-many other methods.
};
template<class ConnectionType>
class Event1
{
public:
typedef BaseEvent<Event1<ConnectionType>,ConnectionType> DadType;
ConnectionType *grandfather;
void event(void*, ssize_t)
{
printf("ev1, event \n");
grandfather->func1;
};
};
template<class ConnectionType>
class Event2
{
public:
typedef BaseEvent<Event2<ConnectionType>,ConnectionType> DadType;
ConnectionType *grandfather;
void event(void*, ssize_t)
{
};
};
template<class StorageType>
class Connection
{
public:
BaseEvent<Event1<Connection<StorageType> >, Connection<StorageType> > ev1;
BaseEvent<Event1<Connection<StorageType> >, Connection<StorageType> > ev2;
void func1
{
printf("func1 \n");
};
void iter
{
ev1.handler.grandfather = this;
printf("iteri \n");
ev1.event(NULL, 0);
};
};
class SuperStorage25
{
};
int main
{
Connection<SuperStorage25> sas;
sas.iter;
return 0;
}
template <class T, class T2>
class AB
{
typedef AB<T,T2> owntype;
}
для owntype есть что-то чтобы 2 раза одно и тоже не писать, а то могут быть ведь трёхэтажные конструкции
для owntype есть что-то чтобы 2 раза одно и тоже не писать, а то могут быть ведь трёхэтажные конструкциичто-то я не вижу, чтобы у тебя много раз встречалась в коде такая конструкция
event1, event2, connection. Ну и в любом другом будет, если нужен указатель на родителя, нужен его тип.
на собственный тип ?В C++11 можно сказать std::remove_reference<decltype(*this)>::type (это я решил выяснить работает ли decltype(*this) и нашёл вот этот ответ, с весьма внятным пояснением).
Оставить комментарий
Phoenix
Как можно из Event1::event вызвать Connection<>::func1 ? Виртуальными функциями бы не хотелось очень пользоваться.