![]() |
![]() |
|
Programiranje Programski jezici, tehnike, alatke... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
![]() |
#1 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
![]()
Jezik: C++
Prijavljuje mi gresku na sledeci kod... Predajem funkciju tipa bool, kao argument, a zatim sa tom funkcijom kreiram template strukturu edgeComparator i nju predajem za priority_queue. Kod:
// Struktura edge struct edge { int startNode; int endNode; int value; }; // Funkcija za uporedjivanje bool compare(edge lhs, edge rhs) { return lhs.value>rhs.value; } // Ovo je template. za uporedjivanje dvije strukture, koji zavisi od edge. template<bool(*f)(edge, edge)> struct edgeComparator { bool operator()(const edge& lhs, const edge& rhs) const { return f(lhs, rhs); } }; int put(graph* g, int start, int end, bool(*f)(edge, edge)) { edgeComparator<f> comparator; // Ovjde prijavi gresku priority_queue<edge, vector<edge>, comparator> edgeQ; // ovdje prijavi gresku ... } Kod:
error: ‘f’ cannot appear in a constant-expression| error: template argument 1 is invalid| error: invalid type in declaration before ‘;’ token| error: ‘comparator’ cannot appear in a constant-expression| error: template argument 3 is invalid| error: invalid type in declaration before ‘;’ token| |
![]() |
![]() |
![]() |
#2 |
V.I.P. Programiranje
|
![]()
Loše. Mešaš templejtove i run-time vrednosti varijabla.
Template očekuje nešto što se može utvrditi tokom kompajlovanja. Ti mu prosleđuješ funkciju koju si dobio kao argument - totalni type mismatch. Korišćenje function pointera je prilično loše rešenje, ali bi mogao da umesto sa templejtom, to da uradiš kao member vairable: Kod:
struct edge_comp { protected: bool (*mFunction)(const edge&, const edge&); public: edge_comp(bool (*f)(const edge&, const edge&)) : mFunction(f) { ; } inline bool operator()(const edge& one, const edge& two) const { return mFunction(one, two); } }; int main(int argc, char** argv) { // neka je compare globalna funkcija za upoređivanje edge_comp comp(&compare); return 0; } ![]() |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
clzola (3.9.2011) |
![]() |
Bookmarks sajtovi |
|
|
![]() |
||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Veliki problem sa Transcend plejerom - Sennheiser sluške ne rade a druge rade | kefalo | Zvuk na računaru | 7 | 3.2.2011 23:45 |
Problem sa puštanjem HD filmova sa eksternog HDD-a | Pipboy | Foto i audio/video | 0 | 24.12.2010 21:09 |
Sve što niste znali o avanturama, a, iskreno, nije vas ni zanimalo | Shlaymara | Avanturističke igre | 25 | 5.5.2010 15:22 |
leadtek Winfast 2000 expert - nemogu da dobijem signal na s-video ulazu sa sat. risiv | ural | Foto i audio/video | 17 | 30.8.2006 1:36 |