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 : 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]
 
  // ...
 
}
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 : Sélectionner tout - Visualiser dans une fenêtre à part
fprintf(stdout,"-> %s\n", typeid(matrix_type).name()) ;
qui dit toujours la même chose:
-> h
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.