2013-11-20 3 views
2

Почему это утверждение не является законным?Создание массива двоичных функций

typedef std::binary_function <double, double, bool> BF; 

BF checks[] = { &less<double>, &less_equal<double> }; 
+3

Было бы неплохо опубликовать описание ошибки. –

+4

Во-первых, возможно, потому что ['std :: less'] (http://en.cppreference.com/w/cpp/utility/functional/less) является шаблоном, который принимает только один аргумент? EDIT: Фактически, прочитав сообщение об ошибке, которое он дал вам, вы бы показали, что ... – JBL

+0

Действительно ли оператор & требуется, поскольку std :: less - это метод шаблона? – bkausbk

ответ

2

std::less и std::less_equal не функционирует, но функции объектов. Вам нужно создать экземпляр, например. :

std::binary_function<double, double, bool> checks[] = { less<double>() }; 

иметь также в виду, что std::binary_function является устаревшим, так как C++ 11. Вместо этого вы должны использовать std::function, например. :

std::function<bool(double, double)> checks[] = { less<double>() }; 
3

Оба less и less_equal один аргумент шаблона не два. Это типы не объекты, вы должны передавать объекты, посмотреть, как я использовал () для создания объектов из этих типов. Кроме того, для типов шаблонов вы должны использовать using вместо typedef.

using BF = std::binary_function <double, double, bool>; 

BF checks[] = { less<double>(), less_equal<double>() }; 
          ^^     ^^ 

 

The std::binary_function устарела, вы можете использовать вместо std::function:

using BF = std::function <bool(double, double)>; 

BF checks[] = { less<double>(), less_equal<double>() }; 
0

std::binary_function и less<double> все объекты. Поэтому, если вы создаете массив из std::binary_function, вы должны хранить объекты.

less<double> - это тип. так &less<double> ничего не значит

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