Olen koodannut C++:ssalla tota morabarabahaastetta ja huomasin että minulla on aika paljon koodia. Kaikki paitsi 8 rivin main on luokissa mutta miten saisin luokat omiin tiedostoihin?
Ajattelin että includella mutta netissä sanottiin että ei pitäisi includeata cpp-tiedostoja. Miksi?
Pitääkö minun tehdä headerit ja mitä niihin tulee? Miten minun compilauskomento muuttuu? Kannattaako käyttää esim. gnu makea?
Hämmennykseni johtuu siitä että käytän C++:ssaa vain kisakoodauksessa ja tässä performanssin vuoksi. Uudemmissa kielissä on yleensä hyvin helppoa tehdä tiedostoihin jako.
Katso valmis koodivinkki
Katsopa tätä koodivinkkiä.
Syy siihen, että cpp-tiedostoja ei saa suoraan liittää toisiinsa, on yksinkertaisesti se, että (tavanomaisissa kehitysympäristöissä) jokainen cpp-tiedosto jo käännetään erikseen, jolloin samat osat koodista tulevat linkitysvaiheessa ohjelmaan monta kertaa ja linkitys epäonnistuu.
Teknisesti C++ ei vaadi mitään erityisiä otsikkotiedostoja, vaan includella voi liittää mitä tahansa. Voit siis hyvin tehdä vain yhden cpp-tiedoston, johon liität includella hpp-tiedostoja, joissa on mielivaltaista koodia. Ratkaisu on ruma ja oikeissa projekteissa usein mahdotonkin mutta kelpaa kyllä näissä kisoissa.
Morabaraba-kilpailussa sopii myös laskea, kannattaako sittenkin koodata tutulla kielellä parempi tekoäly: jos ajankäyttö on alle 2 sekuntia, sen vaikutus tuloksissa on luultavasti alle 1 pisteen.
Kiitos! En huomannut sitä.
Lisäys: @Metabolix: Harkitsin Go:ta, mutta se ei ollut listalla ja osaan C++:ssaa kuitenkin aika hyvin. Minulla on jo koodi joka selvittää kaikki lailliset siirrot asemassa ja se on mielestäni melko siisti. Go on lisäksi tässä käyttökohteessa huomattavasti hitaampi ellei käytä kokeellista gccgo-kääntäjää. Python on toinen kieli, jonka osaan läpikotaisin, mutta se ei oikein kelpaa pelin puun analysoimiseen, koska se nopeasti vetäisi ramin täyteen sen lisäksi että se olisi ainakin kymmenen kertaa hitaampi.
Joonazan kirjoitti:
Harkitsin Go:ta, – – Go on lisäksi tässä käyttökohteessa huomattavasti hitaampi ellei käytä kokeellista gccgo-kääntäjää.
Tarvittaessa gccgo kyllä järjestyy kisaan. Lisäsin sen listalle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.