Chaque Socket<...>
a un Type
enum différent. Hormis les types enum séparés, une raison pour laquelle il n'est pas possible d'utiliser Socket::Type
est qu'une spécialisation de Socket
ne peut même pas inclure l'énumération, ou faire Type
autre chose qu'une énumération.
Vous avez deux options principales:
Utilisez une classe/espace de noms distinct nommé étroitement:
class Sockets {
public:
enum class Type { ... };
};
template<Sockets::Type T>
class Socket { ... };
Socket<Sockets::Type::TCP> s;
Utilisez un type ENUM séparé:
enum class SocketType { ... };
template<SocketType T>
class Socket { ... };
Socket<SocketType::TCP> s;
Sinon, ne pas utiliser le modèle Socket
. Vous allez sûrement vous retrouver avec un tas de if (T == TCP) { ... } else { ... }
. Il serait probablement préférable de séparer proprement les parties communes et d'utiliser deux implémentations différentes pour TCP et UDP.
Comment l'utilisez-vous? 'Socket :: Type :: TCP>' –
chris
Je veux l'utiliser comme 'Socket :: Type :: TCP' –
Ce n'est pas possible. Un modèle est uniquement un modèle jusqu'à ce que vous fournissiez les paramètres. – Galik