Bonjour à tous.
J'aimerai pouvoir faire du CRTP avec quelque chose d'assez particulier :
- les classes dérivées seront des classes template
- j'ai besoin que la classe de base connaisse les paramètres template des classes dérivées (je veux pouvoir travailler "normalement" avec ces types au sein de la classe de base)
- (EDIT) certaines fonctions de ma classe de base vont devoir renvoyer des choses du type TCRTP<T0, TDIM0>, c'est à dire des classes dérivées TCRTP avec d'autres paramètres template (T0, TDIM0 au lieu de T, TDIM) (voir vis à vis de l'exemple après)
Quelle est la bonne façon de concevoir une telle chose ?
J'ai essayé la chose suivante :
mais ça ne compile pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 template<template<class T, unsigned int TDIM> class TCRTP> class NAbstract { T _data[TDIM]; }; template<typename T, unsigned int TDIM> class NArray : NAbstract< NArray<T, TDIM> > { }; template<typename T, unsigned int TDIM> class NVector : NAbstract< NVector<T, TDIM> > { };
Merci beaucoup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 main.cpp|5|error: 'T' does not name a type| main.cpp|8|error: type/value mismatch at argument 1 in template parameter list for 'template<template<class T, unsigned int TDIM> class TCRTP> class NAbstract'| main.cpp|8|error: expected a class template, got 'NArray<T, TDIM>'| main.cpp|13|error: type/value mismatch at argument 1 in template parameter list for 'template<template<class T, unsigned int TDIM> class TCRTP> class NAbstract'| main.cpp|13|error: expected a class template, got 'NVector<T, TDIM>'|
Partager