Шаблоны C ++ и Наследование - PullRequest
       19

Шаблоны C ++ и Наследование

2 голосов
/ 20 сентября 2009

Допустим, у меня есть простой сервер с шаблоном, который принимает клиента в качестве аргумента шаблона:

template<class T>
class Server<T>{
    Server(int port);
}

и Клиент определяется примерно так:

class Client{
    Client(Server<Client> *server, // <--
           int socket);
};

Но я также хочу сказать, что класс User наследуется от Client (class User : public Client), чтобы я мог сделать Server<User> вместо Server<Client>. класс User, очевидно, должен передать Server<Client> в качестве параметра при построении Client. Однако в текущей реализации это кажется невозможным.

Как мне подойти к этой проблеме?

1 Ответ

4 голосов
/ 20 сентября 2009

Как насчет этого?

template<class T>
class Server<T>{
    Server(int port);
};

template<class Derived>
class Client {
    Client(Server<Derived> *server, int socket);
    virtual ~Client() {} // Base classes should have this
};

class User : public Client<User> {
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...