Articles of inférence de type

Est-il possible d’obtenir le type de retour de la «fonction actuelle»

Je voudrais écrire un modèle qui aurait comme paramètre le type de retour de la fonction dans laquelle il est instancié. Par exemple, supposons que j’ai une classe basée sur les Result : template class Result { T _result_value; T& operator=( T that ); ~Result( ); } Il y aurait plusieurs spécialisations pour cette classe. […]

déduction d’argument de modèle pour les constructeurs

Est-ce que C ++ 0x a (ou est-ce que C ++ 0x allait avoir à un moment donné) une déduction d’argument de modèle pour les constructeurs? Dans Présentation du standard C ++ (C ++ 0x) à venir , j’ai vu les lignes suivantes: std::lock_guard l(m); // at 7:00 std::thread t(f); // at 9:00 Cela signifie-t-il […]

Comment avoir le type de template déduit dans les arguments std :: function avec lambda?

J’ai un boost :: variante et je voudrais exécuter un foncteur seulement si la variante est d’un type spécial, alors j’ai créé cette fonction template void if_init(Variant& opt_variant, std::function functor){ if(auto* ptr = boost::get(&opt_variant)){ functor(*ptr); } } Cela fonctionne bien, mais j’aimerais que le type T soit déduit, pour pouvoir écrire que: if_init(b, [](double var){ […]

déduction du type de spécificateur `auto` pour les références

Considérons l’extrait de code suivant void Test() { int x = 0; int& rx = x; int* px = &x; auto apx = px; // deduced type is int* auto arx = rx; // deduced type is int } On pourrait faire une analogie avec les types de pointeurs en supposant que le type déduit […]

decltype vs auto

Si j’ai bien compris, decltype et auto tenteront de déterminer le type de quelque chose. Si on définit: int foo () { return 34; } Alors les deux déclarations sont légales: auto x = foo(); cout << x << endl; decltype(foo()) y = 13; cout << y << endl; Pourriez-vous me dire quelle est la […]

auto avec des littéraux de chaîne

#include #include int main() { const char a[] = “hello world”; const char * p = “hello world”; auto x = “hello world”; if (typeid(x) == typeid(a)) std::cout << "It's an array!\n"; else if (typeid(x) == typeid(p)) std::cout << "It's a pointer!\n"; // this is printed else std::cout << "It's Superman!\n"; } Pourquoi x déduit-il […]

Types de retour auto et fonction C ++ 11

Je connais la différence entre auto , auto& , const auto et const auto& (par exemple dans une boucle “pour chaque”), mais une chose m’a surpris: std::ssortingng bla; const std::ssortingng& cf() { return bla; } int main (int argc, char *argv[]) { auto s1=cf(); const std::ssortingng& s2=cf(); s1+=”XXX”; // not an error s2+=”YYY”; //error as […]

decltype, result_of ou typeof?

J’ai: class A { public: B toCPD() const; Et: template class Ev { public: typedef result_of(T::toCPD()) D; Après avoir instancié Ev , le compilateur dit: meta.h: 12: erreur: ‘T :: toCPD’ n’est pas un type ni decltype ni typeof travail non plus.

Inférer la signature d’appel d’un lambda ou appelable arbitrairement pour “make_function”

Dans certaines situations, il est souhaitable de pouvoir effacer le texte d’un appelable (par exemple, une fonction, un pointeur de fonction, une instance d’object avec operator() , lambda, mem_fn ), par exemple dans Utiliser des adaptateurs Boost avec C ++ 11 lambdas où une copie-assignable et le type constructible par défaut est requirejs. std::function serait […]

Est-il possible d’émuler le modèle ?

Est-ce que c’est possible? Je veux que cela permette de passer des arguments au moment de la compilation. Supposons que ce soit uniquement pour la commodité de l’utilisateur, car on pourrait toujours taper le type réel avec le template , mais pour certains types, c’est-à-dire le pointeur vers les fonctions membre, c’est assez fastidieux, même […]