Ci sarà qualche LINQ ufficiale come una libreria basata su lambda per C ++? [chiuso]

4

Dato che C ++ ha ottenuto lambda con C ++ 11, ci sarà qualche LINQ come la libreria delle funzioni di ordine superiore ufficialmente supportata in seguito? O esiste già una tale libreria utilizzata nel codice di qualità della produzione?

Ovviamente non mi aspetto la sintassi della query LINQ basata su albero di espressioni simili a SQL in C ++. Sto parlando di quello basato su lambda. Quindi, nessuna funzione di nuova lingua è necessaria in C ++ '11, solo una libreria lo farà.

    
posta Gulshan 16.08.2011 - 07:45
fonte

3 risposte

2

LINQ-to-objects è già supportato nella libreria Standard e lo è stato sin dal suo inizio. La sintassi è solo un po 'diversa - non è mai stato concepito per emulare SQL e ha troppi iteratori al suo interno. Puoi renderlo più reminescente senza troppe complicazioni.

Modifica: quando in realtà tentando di renderlo più reminescente senza troppe complicazioni, ho determinato che in realtà poteva essere una seccatura significativa. È, tuttavia, ancora completamente possibile.

    
risposta data 16.08.2011 - 12:33
fonte
1

Note: per C ++ 2011 non esiste tale funzionalità. Fortunatamente, il prossimo C ++ dovrebbe includere una libreria di file system (vedi boost :: filesystem) in modo da poter indovinare che una tale libreria di database non sarà standardizzata presto.

Ci sono diverse (e alcune recenti) discussioni sulla mailing list di boost su tale libreria. Diverse persone puntano a potenziali librerie di tipo boost come SOCI e CPPDB .

Inoltre, non vedo come lambda possa essere d'aiuto per tale funzionalità. Lambdas sono ancora codice, non costrutti EDSL.

    
risposta data 16.08.2011 - 12:02
fonte
0

C'è ODB che è interessante.

guarda il codice di esempio dalla voce wikipedia ODB che cerca tutte le persone chiamate Doe più giovani di 30 (età e l'ultima sono colonne DB, mappate direttamente su una classe, questo viene fatto dal compilatore ODB per mantenere sempre le classi generate automaticamente in sincronia con lo schema DB, senza dover modificare un file di definizione del codice di mappatura di DB > ). Mi piace per questo, avendo dovuto mantenere un assembly Entity Framework.

  transaction t(db.begin ());

  result r(db.query<person>(query::last == "Doe" && query::age < 30));

  for (result::iterator i (r.begin ()); i != r.end (); ++i)
  {
    cout << "Hello, " << i->first () << endl;
  }

  t.commit ();
    
risposta data 16.08.2011 - 12:38
fonte

Leggi altre domande sui tag