problème de typedef conditionnel.
Salut les C++,
j'essaie, enfin je bute sur le problème, de faire un typedef en fonction d'un argument de type int passé en paramètre a une fonction.
Mais du code vaut mieux qu'un long discours:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| cv::Mat make_kernel(const string kernel_type, const int ksize, const char center_value, const float factor, const int datatypes) {
cv::Mat kernel(ksize, ksize, datatypes, cv::Scalar(0)) ;
typedef uint8_t matrix_type ;
fprintf(stdout,"==> %d\n", datatypes) ;
switch (datatypes) {
/** to @BUGFIX: this don't work as expect */
case 0 : {
typedef uint8_t matrix_type ;
break ;
}
case 1 : {
typedef int8_t matrix_type ;
break ;
}
case 2 : {
typedef uint16_t matrix_type ;
break ;
}
case 3 : {
typedef int16_t matrix_type ;
break ;
}
case 4 : {
typedef int32_t matrix_type ;
break ;
}
case 5 : {
typedef float matrix_type ;
break ;
}
case 6 : {
typedef double matrix_type ;
break ;
}
default :
fprintf(stdout,"Kernel matrix type not found\n") ;
return cv::Mat() ;
}
fprintf(stdout,"-> %s\n", typeid(matrix_type).name()) ;
matrix_type counter = 0 ;
const matrix_type val = 1 * factor ;[/B]
// ...
} |
Sans le premier typedef ( a l'extérieur du switch() { }) le compilateur refuse de compiler mon code.
Et sinon le type reste toujours le même: unint8_t... Selon cette fonction:
Code:
fprintf(stdout,"-> %s\n", typeid(matrix_type).name()) ;
qui dit toujours la même chose:
Si vous avez une solution je suis preneur car j'ai retourner le problème dans tous les sens, (#define conditionelle, ternaire a a gauche pour indiquer le type, etc...) je n'y arrive pas.
Merci pour vos réponse éclairées.