/ / aucun membre nommé 'dynamic_cast_tag' dans l'espace de noms boost :: detail (SALOME 7.3.0) - c ++, boost, ptr-shared, diffusion dynamique

aucun membre nommé 'dynamic_cast_tag' dans l'espace de noms boost :: detail (SALOME 7.3.0) - c ++, boost, ptr-partagé, diffusion dynamique

J'essaye de compiler SALOME 7.3.0 sur OSX Mavericks (Darwin 13.0.0) et avez boost 1.55 installé (en utilisant homebrew). GCC étouffe l'une des fonctions du toolkit de SALOME (SRC / DF) lors de la tentative de définition d'une fonction de modèle

    In file included from /Users/dingram/Developer/SALOME/KERNEL_SRC_7.3.0/src/DF/DF_Attribute.cxx:20:
/Users/dingram/Developer/SALOME/KERNEL_SRC_7.3.0/src/DF/DF_definitions.hxx:50:44: error: no member named "dynamic_cast_tag" in namespace
"boost::detail"
boost::shared_ptr<T>(r,boost::detail::dynamic_cast_tag())
^

le fragment de code est

#include <iostream>
#include <stdio.h>
#include <boost/shared_ptr.hpp>

template<class T> class df_shared_ptr: public boost::shared_ptr<T>
{
public:
df_shared_ptr() {}

template<class Y>
explicit df_shared_ptr(Y * p)
{
boost::shared_ptr<T>::reset(p);
}

template<class Y>
df_shared_ptr(df_shared_ptr<Y> const & r):
boost::shared_ptr<T>(r,boost::detail::dynamic_cast_tag())
{}

Je ne suis pas un programmeur C ++ et je suis donc plus qu'un peu bloqué. Des problèmes similaires ont été signalés sur les forums SALOME mais aucune réponse.

Réponses:

1 pour la réponse № 1

Une modification récente apportée à la bibliothèque de boost élimine boost :: detail :: dynamic_cast_tag () au profit d'un nouveau mécanisme de diffusion dynamique. La documentation à ce sujet est faible à inexistante.

Vous devriez être capable de construire avec un boost plus ancien, je pense que 1.44 devrait être suffisant.


0 pour la réponse № 2

J'ai rencontré un problème similaire. l'édition du source et l'utilisation de dynamic_pointer_cast <> ont résolu le problème. Dans ce cas:

  boost::shared_ptr<T>(r,boost::detail::dynamic_cast_tag())

devient

  boost::shared_ptr<T>(dynamic_pointer_cast<T>(r))