SpirosLouis Δημοσ. 2 Απριλίου 2016 Δημοσ. 2 Απριλίου 2016 Καλησπέρα σας, Φτιάχνω ένα πρόγραμμα στη C++ που κάνει κάτι μετατροπές σε αρχεία(δεν έχει σημασία τι ακριβώς) Αυτό που θέλω να ρωτήσω, υπάρχει τρόπος έτσι ώστε να μπορούν άλλοι να βάλουν σε έναν υποφάκελο του project τις δικές τους κλάσεις ή function σε αρχεία και με ένα compile μόνο αυτά να συμπεριληφθούν; Ουσιαστικά να λες δυναμικά ότι σε κάποιο φάκελο υπάρχουν και άλλες μέθοδοι για μετατροπή των αρχείων.
Moderators Kercyn Δημοσ. 2 Απριλίου 2016 Moderators Δημοσ. 2 Απριλίου 2016 Μπορείς να βάλεις scripting support, έτσι ώστε να μπορεί κάποιος να ορίσει τη δική του μετατροπή. Πρέπει να φύγω τώρα, θα το αναπτύξω περισσότερο σε λίγο αν σ' ενδιαφέρει.
SpirosLouis Δημοσ. 2 Απριλίου 2016 Μέλος Δημοσ. 2 Απριλίου 2016 Μπορείς να βάλεις scripting support, έτσι ώστε να μπορεί κάποιος να ορίσει τη δική του μετατροπή. Πρέπει να φύγω τώρα, θα το αναπτύξω περισσότερο σε λίγο αν σ' ενδιαφέρει. Αν θες αναπτυξέτο. Βρήκα κάτι πάνω στο keyword που μου έδωσες και βρήκα το ChaiScript
the other one Δημοσ. 2 Απριλίου 2016 Δημοσ. 2 Απριλίου 2016 Μέσα στο makefile σου πιθανότατα θα κάνεις μερικά check και αναλόγως θα ορίζεις κάποιες μεταβλητές για να τις περνάς στον compiler. αυτό το chaiscript δε ξέρω τι είναι για προγραμματισμό κελύφους μιλαμε πάντως ( bash πχ)
defacer Δημοσ. 2 Απριλίου 2016 Δημοσ. 2 Απριλίου 2016 Αυτό που θέλω να ρωτήσω, υπάρχει τρόπος έτσι ώστε να μπορούν άλλοι να βάλουν σε έναν υποφάκελο του project τις δικές τους κλάσεις ή function σε αρχεία και με ένα compile μόνο αυτά να συμπεριληφθούν; Ουσιαστικά να λες δυναμικά ότι σε κάποιο φάκελο υπάρχουν και άλλες μέθοδοι για μετατροπή των αρχείων. Αν εννοείς να συμπεριληφθούν στο compilation, αυτό εξαρτάται από το build system σου. Π.χ. αν έχεις makefile μπορείς να κάνεις κάτι του στυλ SOURCES = $(wildcard extensions/*.cpp) και να τα συμπεριλάβει. Αυτό βέβαια δεν είναι αρκετό για να χρησιμοποιηθεί το extra source με οποιοδήποτε τρόπο. Για να το πετύχεις αυτό θα πρέπει να έχεις κάποιου είδους "registry" στην εφαρμογή και να λες στους extension authors ότι πρέπει να κάνουν register καλώντας μια κάποια method του registry. Αυτοί μετά πρέπει να κάνουν το εξής σε κάποιο source file: // anonymous namespace namespace { // plugin stuff could go here, or it can be in some other namespace and file, doesn't matter bool success = Registry::instance().register(...pointer_to_some_plugin_description_method...); } Η φάση με το anonymous namespace είναι ότι από τη μία δε μπορεί να κάνει conflict με τίποτα και να θες, και από την άλλη η success που δηλώνεις έτσι παρόλο που δε μπορεί να προσπελαστεί από πουθενά εντούτοις πρέπει να αρχικοποιηθεί όταν ξεκινάει η εκτέλεση. Αυτό έχει σαν αποτέλεσμα να βάλει ο compiler να κληθεί η register πριν ξεκινήσει να εκτελείται η main σου, οπότε εκεί το plugin σου δίνει πληροφορίες για τον εαυτό του και όποτε αποφασίσεις κατά την εκτέλεση έχοντας αυτές ξεκινάς να κάνεις ο,τι νομίζεις. Σαν extra bonus, αυτή η τεχνική δεν απαιτεί να κάνεις recompile το δικό σου κώδικα (το main project). Χρειάζεται μόνο να κάνεις compile το plugin και μετά link μαζί με τα δικά σου (προφανώς το link δε γλιτώνεται). Προσοχή στο ότι η πρόσβαση στο registry γίνεται όχι μιλώντας σε κάποιο global object (δεν είναι εγγυημένη η σειρά αρχικοποίησης) αλλά καλώντας functions που δημιουργούν το registry επιτόπου αν δεν υπάρχει ήδη. Παρόλα αυτά δεν είμαι σίγουρος αν αυτό είναι που ψάχνεις. 1
SpirosLouis Δημοσ. 3 Απριλίου 2016 Μέλος Δημοσ. 3 Απριλίου 2016 @defacer μην έχεις ή μπορείς να φτιάξεις κάποιο γρήγορο παράδειγμα; Αυτό είναι που ψάχνω. Βρήκα ένα παράδειγμα με Macro εντολές αλλά λόγο του ότι είναι σε πολύ μεγαλύτερο πακέτο κώδικα, δεν είναι καθαρό τι γίνεται ακριβώς.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα