2011-02-10 2 views

Répondre

10
+1

Et si vous appelez des fonctions avec plus de 9 arguments alors vous devez repenser votre conception! – GrahamS

+0

@GrahamS Je pense que boost.lambda bind prend jusqu'à 9 aussi bien. Boost.Spirit.Phoenix, la bibliothèque que j'utilise pour la programmation fonctionnelle, a une macro de 10 w/a par défaut pour définir la limite supérieure. – KitsuneYMG

+0

J'ai écrit un système IOC qui nécessitait des templates par argument utilisés pour construire des objets. Je pense qu'il a fini par atteindre 12. Peut-être que trop – CashCow

3

Même si vous ne pouvez pas passer à C++ 11, vous devriez envisager de passer de boost :: function aux fonctions TR1, qui était un aperçu de C++ 11

Fondamentalement, ce qui a commencé comme boost :: function est devenu une partie de la bibliothèque standard C++, qui De nos jours est défini avec des modèles variadiques. En un mot, cela signifie qu'il n'y a pas de limite plus difficile (mais vous pourriez avoir besoin de définir des variables d'espace réservé supplémentaires si vous avez besoin au-delà de _19)

Pour passer de la fonction boost :: à std :: TR1 faire le

suivant

trouver toutes les occurences #include <boost/function> et #include <boost/bind> et les remplacer par:

#include <tr1/functional> 
using std::tr1::function; 
using std::tr1::bind; 
using std::tr1::placeholders::_1; 
using std::tr1::placeholders::_2; 
... 

Cela devrait fonctionner en remplacement de drop-in. Si vous passez à C++ 11 plus tard, lancez dans la partie "tr1".

Questions connexes