2011-02-10 2 views

ответ

10
+1

И если вы вызываете функции с более чем 9 аргументами, вам нужно переосмыслить свой дизайн! – GrahamS

+0

@GrahamS Я думаю, что boost.lambda bind занимает до 9. Boost.Spirit.Phoenix, библиотека, которую я использую для функционального программирования, имеет значение по умолчанию 10 w/macro для определения верхнего предела. – KitsuneYMG

+0

Я написал систему IOC, которая требовала шаблонов для каждого аргумента, используемого для построения объектов. Я думаю, что это закончилось тем, что достигло 12. Было, вероятно, слишком много – CashCow

3

Даже если вы не можете переключиться на C++ 11, вам следует рассмотреть возможность переключения с boost :: function на функции TR1, что было предварительным просмотром для C++ 11

В основном, что началось с того, что функция boost :: стала частью стандартной библиотеки C++, которая в настоящее время определяется вариационными шаблонами. В двух словах это означает, что не существует жестких ограничений больше (но, возможно, потребуется определить дополнительные переменные заполнителей, если вам нужно что-то за пределами _19)

Чтобы перейти от повышения :: функции STD :: TR1 сделать следующий

найти все вхождений #include <boost/function> и #include <boost/bind> и заменить их:

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

Это должно работать как падение в замене. Если вы перейдете на C++ 11 позже, просто отбросьте из части «tr1».

Смежные вопросы