Ik heb de volgende klasse (klein voorbeeldje, maar komt architectisch wel overheen met mijn probleem)
Nu wil ik de functie test() specialiseren voor DOWN en UP. Dus eigenlijk wil ik zoiets doen:
MSVC geeft echter de foutmelding
C++:
1
2
3
4
5
6
7
8
| typedef enum direction_t {DOWN = 0, UP = 1}; template <class T, direction_t U> class my_class { public: int test(); /* heleboel andere functies, etc. */ }; template <class T, direction_t U> int my_class<T, U>::test{cout << "direction is " << U << endl;} |
Nu wil ik de functie test() specialiseren voor DOWN en UP. Dus eigenlijk wil ik zoiets doen:
C++:
1
2
3
4
5
6
7
8
9
| typedef enum direction_t {DOWN = 0, UP = 1}; template <class T, direction_t U> class my_class { public: int test(); /* heleboel andere functies, etc. */ }; template <class T> int my_class<T, DOWN>::test() {cout << "direction is down" << endl;} template <class T> int my_class<T, UP>::test() {cout << "direction is up" << endl;} |
MSVC geeft echter de foutmelding
Dit kan kennelijk dus niet. Ik wil echter niet de hele klasse specialisen, eg template <class T> class my_class<T, DOWN> {...}; want dan moet ik of de hele klasse opnieuw implementeren en alle members dupliceren (template specialisation kan niet bij "general" klasse, is totaal op zich), of class inheritance doen. Dat wilde ik ook niet. Ik wil juist deze functie in tweeen splitsen zodat er niet in de functie test() een if (direction == DOWN) conditie staat. Is er een manier om het wel te doen op de manier die ik wil?error C3860: template argument list following class template name must list parameters in the order u sed in template parameter list
error C2976: 'my_class<T, direction_t>': too few template arguments
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge