掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
関数オブジェクトと関数ポインタを区別なく扱いたい (ID:66737)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
関数オブジェクトと関数ポインタ、テンプレート引数、関数バインダの 関係を勉強しているのですが、以下のコードの(1),(2),(3)のところで コンパイルエラーになります。 コンパイルエラーになっている原因はどこにあるのでしょうか? ぼくは、(1),(2),(3)のどれも問題なくコンパイルできることを期待していたのですが。 #include <vector> #include <algorithm> #include <functional> #include <iostream> template <class T, class Pred> bool foo(const T& beg, const T& end, const Pred& pred) { return std::find_if(beg, end, pred) == end; } bool iseven(int n) { return n % 2 == 0; } struct iseven2 { bool operator()(int n) const { return n % 2 == 0; } }; int main() { int even[] = { 2, 4, 6, 8 }; std::vector<int> v; v.push_back(1); std::find_if(even, even+4, iseven); // 問題なし std::find_if(even, even+4, iseven2()); // 問題なし std::find_if(v.begin(), v.end(), iseven); // 問題なし std::find_if(v.begin(), v.end(), iseven2()); // 問題なし std::find_if(even, even+4, std::not1(std::ptr_fun(iseven))); // 問題なし foo(v.begin(), v.end(), iseven); // 問題なし foo(even, even+4, iseven); // (1)コンパイルエラー // no matching function for call to `foo(int[4], int*, bool (&)(int))' foo(v.begin(), v.end(), iseven2()); // 問題なし foo(even, even+4, iseven2()); // (2)コンパイルエラー // no matching function for call to `foo(int[4], int*, iseven2)' foo(v.begin(), v.end(), std::not1(iseven2())); // (3)コンパイルエラー } // g++ 3.4.4 cygwin
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.