2011-12-27 11 views
0

"C++ Templates:The Complete Guide"を読んでください。22.5.3関数呼び出し構文?

私は関数ポインタに使用する構文と混同しています。私はこの構文が "関数呼び出し構文"と呼ばれると信じていますか?私はここに何かを逃しているように感じる?私は問題のコードのセクションをコメントしました。

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()でintにTを置き換え、それはまだコンパイルされません。

彼は最初にこの構文は、その前のセクションで言及:

「が書き込まれるように、本ファンクタ仕様手法の利点は、引数として通常の関数ポインタを渡すことも可能であるということである例えば:

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; 
} 
関連する問題