Static inline méthodes?
Bon,
Voici ce que je suis en train de faire... maintenant, c'est de la compilation, mais à défaut à relier... LNK2001
Je veux les méthodes statiques, car il n'y a aucun membre de variables, mais j'ai aussi envie de leur en ligne pour les accélérations qu'ils fournissent.
Quelle est la meilleure façon de le faire? Voici ce que j'ai en un mot:
/* foo.h */
class foo
{
static void bar(float* in);
};
/* foo.cpp */
inline void foo::bar(float* in)
{
//some dark magic here
}
Je suis en train de le faire parce que je veux être en mesure d'aller:
foo::bar(myFloatPtr);
foo n'a pas toutes les variables de membre... ça n'a pas de sens.
Aussi, à partir d'un point de vue design, serait-il possible d'utiliser une référence à un flotteur plutôt qu'un pointeur? Une référence est généralement préférée.
oui, je sais... mais dans ce cas je ne peux pas obtenir à travers le dynamicness 🙂
++1 Pour "la magie noire".
oui, je sais... mais dans ce cas je ne peux pas obtenir à travers le dynamicness 🙂
++1 Pour "la magie noire".
OriginalL'auteur Polaris878 | 2009-10-27
Vous devez vous connecter pour publier un commentaire.
Si vous appelez de la barre à partir d'un autre fichier cpp, autres que foo.cpp il doit être dans un fichier d'en-tête.
OriginalL'auteur gatorfax
Tout d'abord, je voudrais les mettre dans un
namespace
au lieu de cela, car il n'y a pas de logique dans ce"class"
. Deuxièmement, vous pouvez définir les fonctions du corps dans le fichier d'en-tête directement pour permettre au compilateur de les voir. Sinon, vous avez besoinwhole program optimization
être fait par l'éditeur de liens pour inline ces fonctions(autant que je sache).OriginalL'auteur AraK
Vous devez définir votre fonction en ligne dans le fichier d'en-tête, pas une mise en œuvre de fichier. Les définitions sont nécessaires lorsque le fichier d'en-tête est inclus, si elles sont espéraient être incorporé, après tout.
L'échec de la liaison de vous voir c'est parce que la déclaration (dans le fichier d'en-tête) de ne pas informer le compilateur que la méthode est d'être en ligne, tandis que la mise en œuvre est en ligne, donc pas disponibles pour la liaison.
OriginalL'auteur John Zwinck
Généralement inline-fonctions de mesure sont mis en œuvre là où elles sont déclarées (dans le fichier d'en-tête). Le compilateur est libre de fonctions en ligne que vous avez, mais vous ne pouvez pas force à inline rien. Si vous utilisez Visual C++, activez l'option "inline tout adapté", "link-temps de génération de code" et "favoriser le code rapide".
OriginalL'auteur Tim Sylvester