Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    [C++] Come dichiarare una costante in una libreria?

    Sto scrivendo una libreria per far muovere un motore ad Arduino, il motore può muoversi in 3 modalità e per ora nella funzione che attiva il motore devo scrivere 1, 2 oppure 3 per indicare la modalità.
    Vorrei invece poterci scrivere un nome, come ad esempio rispettivamente FULLSTEP, FULLTORQUE oppure HALFSTEP e fare in modo che poi scrivendo "stepper.forward(HALFSTEP)" la libreria sappia di che sto parlando, quindi dovrei definire queste costanti nella libreria che poi viene inclusa nel codice del programma vero e proprio.

    Come e dove mi conviene intervenire?
    Uso #define o const? Nell'header o nel file cpp?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Di sicuro le devi definire nell'header file.
    La #define bypassa i namespaces (mero copia incolla), mentre le variabili const possono essere definite all'interno dei namespaces evitando collisioni di nomi. Se poi vuoi maggiore espressività puoi fare:
    codice:
    struct speed {
        typedef int type;
        static const type fullstep = 1;
        static const type fulltorque = 2;
        static const type halfstep = 3;
    };
    "stepper.forward(speed::halfstep)"
    Insomma la scelta è vasta (tralascio le enum class dato che non hai detto che compilatore usi)
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Che io sappia la toolchain di default dell'Arduino (basata su avr-gcc) lavora in modalità C++11, comunque anche senza enum class questo è il caso d'uso standard già per le normali enum.
    codice:
    // Nel .h
    class Stepper {
        enum StepMode {
            fullstep,
            fulltorque,
            halfstep
        };
    
        void forward(StepMode sm);
        // ...
    };
    
    
    // Esempio d'uso:
    Stepper stepper(...);
    stepper.forward(Stepper::fulltorque);
    Ultima modifica di MItaly; 25-09-2015 a 13:45
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da shodan Visualizza il messaggio
    ...
    Insomma la scelta è vasta (tralascio le enum class dato che non hai detto che compilatore usi)
    Uso l'IDE ufficiale di Arduino e faccio tutto con quello.

    Il sistema con enum funziona perfettamente.
    Grazie a tutti e due.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.