Yapıların vektöründe bir öğe bulmaya çalışıyorum. Kod, büyük/küçük harfe duyarlı bir şekilde arama yaparken çalışır. Büyük/küçük harf duyarlı olmak için geliştirmeye çalıştığımda, iki konuya giriyorum.Yükseltme phoenix'i kullanarak, find_with'i start_with ile nasıl çağırabilirim?
Daha önce çalışan VS2010 yapısını
boost/algorithm/string.hpp
keser. Hata "'boost :: phoenix :: bind': aşırı yüklü işleve belirsiz çağrı". Xcode'ta tamam. Bağları ayırmak için herhangi bir yol var mı?Sanırım istarts_with çağrısı ekleyerek ikinci (yorumla) find_if satırında yanlış sözdizimi var. "Hata:" tip '"adlı bir tür yok" diyerek phoenix başlıkları hataları alıyorum. Sorun # 1'in düzeltilebileceğini varsayarak, bu satırı nasıl düzeltmeliyim?
teşekkürler!
Kodu:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp> // This include breaks VS2010!
#include <boost/phoenix/bind.hpp>
#include <boost/phoenix/core.hpp>
#include <boost/phoenix/operator.hpp>
#include <boost/phoenix/stl/algorithm.hpp>
using namespace boost::phoenix;
using boost::phoenix::arg_names::arg1;
using boost::istarts_with;
using std::string;
using std::cout;
// Some simple struct I'll build a vector out of
struct Person
{
string FirstName;
string LastName;
Person(string const& f, string const& l) : FirstName(f), LastName(l) {}
};
int main()
{
// Vector to search
std::vector<Person> people;
std::vector<Person>::iterator dude;
// Test data
people.push_back(Person("Fred", "Smith"));
// Works!
dude = std::find_if(people.begin(), people.end(), bind(&Person::FirstName, arg1) == "Fred");
// Won't build - how can I do this case-insensitively?
//dude = std::find_if(people.begin(), people.end(), istarts_with(bind(&Person::FirstName, arg1), "Fred"));
if (dude != people.end())
cout << dude->LastName;
else
cout << "Not found";
return 0;
}
Hangi Boost sürümünü kullanıyorsunuz? – MDman
Yükseltmeyi Kullanma 1.48.0. –