class Classe { public: int function(int i) const { return i; } }; int main() { // The name of the variable is ptr_func. int (Classe::*ptr_func)(int i) const = &Classe::function; Classe c; return (c.*ptr_func)(2); }
Exemple avec une fonction utilisant des template avec auto déduction. Dans ce cas, il faudra faire un cast pour donner le type des éléments déduits.
struct S5 { template <typename... T, typename... U> void f(U&&...) const { std::cout << "S5" << sizeof...(T) << "-" << sizeof...(U) << "\n"; } }; auto ptr = static_cast<void (S5::*)(int&&, char&&) const>(&S5::f<int, double, char>)
Disambiguate overloaded member function pointer being passed as template parameter Archive du 26/07/2013 le 29/05/2021
Plutôt que
int foo(int i); int foo(int i) { int value; if (i == 1) { value = 1; } else if (i == 2) { value = 2; } else { value = 3; } return value; } int main(int argc, char* /* argv */[]) { return foo(argc); }
écrire
int foo(int i); int foo(int i) { const int value = [i]() { if (i == 1) { return 1; } if (i == 2) { return 2; } return 3; }(); return value; } int main(int argc, char* /* argv */[]) { return foo(argc); }
non-const lvalue reference to type 'X<…>' cannot bind to a temporary of type 'X<…>'
Parfois, il n'est pas possible de faire:
int i; int& j = i;
Il faut alors soit passer par une référence constante :
int i; const int& j = i;
ou passer par un pointeur :
int i; int* j = &i;
Non const lvalue references Archive du 02/09/2013 le 05/11/2021