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:
Sans le premier typedef ( a l'extérieur du switch() { }) le compilateur refuse de compiler mon code.
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
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] // ... }
Et sinon le type reste toujours le même: unint8_t... Selon cette fonction:
qui dit toujours la même chose:
Code : Sélectionner tout - Visualiser dans une fenêtre à part fprintf(stdout,"-> %s\n", typeid(matrix_type).name()) ;
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.-> h
Merci pour vos réponse éclairées.
Partager