9
votes

Générer une séquence de type T au moment de la compilation

J'ai le problème suivant: xxx

Je veux obtenir le type de résultat de appelable qui prend Taillef ... (n_i) De nombreux arguments du type t comme entrée, par exemple, appelable (1,2,3) en cas de t == int et taille de ... (n_i) == 3 . Comment cela peut-il être mis en œuvre?

Merci d'avance.


1 commentaires

Peut-être regarder std :: INTEGER_SEFENCE sera utile.


3 Réponses :


12
votes

Nous pouvons utiliser un alias de type pour accrocher à l'expansion de n_i code>, mais redonner toujours t code>.

template <class T, std::size_t>
using eat_int = T;

template< typename callable, typename T , size_t... N_i>
void foo()
{
  using callable_out_type = std::result_of_t< callable(eat_int<T, N_i>...) >;

  // ...
}


0 commentaires

5
votes

Vous pouvez écrire les aides suivants xxx

puis dans votre foo vous écrivez xxx

Démo en direct


0 commentaires

6
votes

Pourquoi ne pas simplement utiliser:

using callable_out_type =  std::result_of_t< callable(std::enable_if_t<(N_i, true), T>...) >;


0 commentaires