Kezdőoldal » Számítástechnika » Programozás » Template és több modulos program?

Template és több modulos program?

Figyelt kérdés

Valószínűleg nagyon amatőr a kérdés, de egy problémába ütköztem.


A header fájlban deklaráltam egy osztályt, aminek van egy template tagfüggvénye.


template <typename S, typename D>

void search(S sel, D data, std::ostream& os)

{...}


A tagfüggvényeket a projekt fájlban valósítottam meg, ezt is úgy szerettem volna, de "nem hagyta magát". Ha csak a .h-ban írtam ki a template-s sort, akkor a .cpp-ben nem ismerte fel S-et és D-t. Ha mindkettőben kiírtam, akkor pedig a tesztelésnél nem tudtam átadni neki a predikátumokat. Végül a függvény definícióját is a .h fájlban írtam meg (az osztály deklarációján belül), így tökéletesen működik, viszont eléggé ronda. Hogyan kéne szebben megcsinálni? Mit hova kéne "pakolnom"?



#program #C++ #osztály #template #predikátum #rossz helyen van minden
2018. márc. 31. 20:08
 1/4 sharkxxx ***** válasza:

A template függvényeket, nem a forráskód fájlokban (.cpp) kell definiálni, hanem a header fájlokban (.h).


Ha rendes függvényt akarsz készíteni (nem inline függvényt), akkor a függvénynek csak a prototípusát írjad az osztály deklarációján belülre. A függvény definícióját az osztály deklarációján kivûlre írjad.


// valami.h

class Valami {

public:

    template <typename S, typename D>

    void search(S sel, D data, std::ostream& os);

};


template <typename S, typename D>

void Valami::search(S sel, D data, std::ostream& os) {

    //...

}

2018. márc. 31. 22:56
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
Köszi a segítséget! Akkor ezek szerint tényleg a .h fájlban kell lennie, ebben nem voltam biztos.
2018. ápr. 1. 10:52
 3/4 A kérdező kommentje:

És akkor ezek szerint a template <typename S, typename D> sort a definícióban és a deklarációban is ki kell írni?

Valamint a deklarációban elég lenne az hogy void search(S, D, std::ostream&), vagy oda is ki kell írnom template esetében hogy S sel éd D data?

2018. ápr. 1. 10:55
 4/4 sharkxxx ***** válasza:
A függvény prototípusába nem muszáj paraméterneveket megadni.
2018. ápr. 1. 14:09
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!