J'ai une classe de modèle pour vecteur thread-safe:Lorsque j'ai besoin de spécialiser le nom de type que j'ai déclaré dans ma classe de template, quels arguments dois-je utiliser?
template <class T>
class SharedVector {
std::vector<T> vect;
CRITICAL_SECTION cs;
SharedVector(const SharedVector<T>& rhs) {}
public:
typedef typename std::vector<T>::size_type SizeType;
SharedVector();
void PushBack(const T& value);
void PopBack();
SizeType size();
const T& operator[](int index);
void erase(int index);
void Lock();
void Unlock();
virtual ~SharedVector();
};
Ensuite, je veux l'utiliser dans mon gestionnaire de client pour le serveur TCP de déléguer certaines responsabilités de gestionnaire de clientèle à ce vecteur:
class TCPClientManager {
TCPClientManager(const TCPClientManager&) {}
TCPClientManager& operator=(const TCPClientManager&) {}
SharedVector<Connection*> connections;
public:
TCPClientManager();
SharedVector<>::SizeType size(); //here is the problem
void addConnection(const Client&);
void breakConnection(int);
void deleteConnection(int);
void Lock();
void Unlock();
~TCPClientManager();
};
typename SharedVector<>::SizeType TCPClientManager::size() {
return connections.size();
}
Je dois déclarer le type de valeur de récupération. Le compilateur a dit qu'il y avait trop peu d'arguments pour le modèle.