2015-07-16 2 views
3

Voici un code simplifié d'un fichier d'en-tête dans lequel les fonctions libres sont déclarées mais non définies et le vecteur est à la fois déclaré et défini.Possible de déclarer le vecteur const dans le fichier d'en-tête?

Le fichier cpp contient l'implémentation des fonctions libres.

Je me demandais s'il y avait un moyen de déclarer le vecteur dans le fichier d'en-tête et de mettre la définition dans le fichier cpp.

// my-file.h 

namespace MyNamespace 
{ 
    bool foo(const std::string& name, const std::string& value); 
    void bar(const std::string& name, const std::string& value); 

    const std::vector<std::function<void(const std::string&, const std::string&)>> m_myVector 
    { 
     foo, 
     bar, 
     [](const std::string& name, const std::string& value) 
     { 
      // do some stuff 
     } 
    }; 

} // MyNamespace 
+0

Si vous déplacez le code d'accès à vecteur à une unité de traduction séparée, vous pouvez utiliser une déclaration avant: template ' std: vecteur; –

+1

Je ne vois pas le vecteur dans le code. Vous cherchez [extern] (http://stackoverflow.com/questions/10422034/when-to-use-extern-in-c) std :: vector ? – nwp

+1

N'utilisez pas un nom comme 'm_myvector' pour les variables non-membres, vous allez confondre les gens qui lisent votre code parce que le préfixe' m_' signifie classiquement un membre. –

Répondre

4

Vous pouvez déclarer la variable const dans votre tête comme:

extern 
const std::vector<std::function<void(const std::string&, const std::string&)>> m_myVector;