2011-12-27 3 views
0

Чтение «C++ Templates: The Complete Guide» Раздел 22.5.3Синтаксис вызова функции?

Я запутался в синтаксисе, который автор использует для указателей на функции. Я считаю, что этот синтаксис называется «Function Call Syntax»? Я чувствую, что здесь что-то не хватает ...? Я прокомментировал раздел рассматриваемого кода.

template<typename F> 
void my_sort(.., F cmp = F()) 
{ 
    .. 
    if (cmp(x,y)) {..} 
    .. 
} 

//*** WHAT IS THIS SYNTAX? *** 
bool my_criterion()(T const& x, T const& y); 

// call function with function pointer passed as value argument 
my_sort(..., my_criterion); 

я заменил все .. 's с соответствующими значениями и заменить Т на междунар в my_criterion(), и он по-прежнему не будет компилироваться.

Он первый упоминает этот синтаксис является разделом перед ним:

«Как написано, преимущество этого метода спецификации функтора является то, что можно также передать обычный указатель на функцию в качестве аргумента. Например:

bool my_criterion() (T const& x, T const& y); 

код Я пытаюсь собрать на основе отрывка из книги:

template<typename F> 
void mySort(F cmp) 
{ 
    std::cout << "mySort(F cmp)" << std::endl; 
} 

bool myCriterion()(int x, int y); 

* ошибка C2091: функция возвращает функцию (имеется в виду myCriterion)

+1

Какое сообщение об ошибке? Также, пожалуйста, напишите некоторые * фактические * код. –

+0

ошибка: C2091: функция возврат функция. Я скопировал код из книги дословно. – Integer

+0

Я имею в виду код, который вы на самом деле пытаетесь скомпилировать. –

ответ

1

Я собираюсь угадать, что это опечатка в книге. Цитирование из книги:

As written, the advantage of this functor specification technique is that it is also possible to pass an ordinary function pointer as argument. For example:

bool my_criterion() (T const& x, T const& y); 
// call function with function object 
my_sort (… , my_criterion); 

Авторы явно пытаются объявить и «обычная функция». Пара скобок сразу после имени функции не должна быть.

0

Я полагаю, что вам не хватает класс называется функтором:

вот небольшой пример.

#include <iostream> 
#include <string> 
#include <sstream> 


struct foobar { 
    void operator()(int x, int y) { 
    std::cout << x << y << std::endl; 
    } 
}; 

int main() { 
    foobar()(10,20); 
    return 0; 
} 
Смежные вопросы