C ++模板和继承

时间:2009-09-20 16:51:04

标签: c++ inheritance templates

假设我有一个简单的服务器,其模板接受客户端作为模板参数:

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

和客户端定义如下:

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

但我也想说,让User类继承自Clientclass User : public Client),所以我可以Server<User>代替Server<Client>。在构建User时,类Server<Client>显然需要将Client作为参数传递。但是,根据目前的实施情况,这似乎是不可能的。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

这个怎么样?

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> {
};