/ / no member o nazwie „dynamic_cast_tag” w rozszerzeniu przestrzeni nazw :: detail (SALOME 7.3.0) - c ++, boost, shared-ptr, casting dynamiczny

brak członka o nazwie "dynamic_cast_tag" w obszarze zwiększania obszaru :: detail (SALOME 7.3.0) - c ++, boost, shared-ptr, dynamic-cast

Próbuję skompilować SALOME 7.3.0 na OSX Mavericks (Darwin 13.0.0) i mają zainstalowane 1.55 boost (używając homebrew). Dławiki GCC w jednej z funkcji zestawu narzędzi SALOME (SRC / DF) podczas próby zdefiniowania funkcji szablonu błąd to:

    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())
^

fragment kodu to

#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())
{}

Nie jestem programistą C ++, więc jestem bardziej niż trochę utrudniony. Istnieją doniesienia o podobnych problemach na forach SALOME, ale nie ma odpowiedzi.

Odpowiedzi:

1 dla odpowiedzi № 1

Niedawna zmiana w bibliotece boostów wyeliminowała boost :: detail :: dynamic_cast_tag () na korzyść nowego mechanizmu dynamicznego rzutowania. Dokumentacja tego jest słaba lub nie istnieje.

Powinieneś być w stanie budować ze starszym doładowaniem, myślę, że 1,44 powinno wystarczyć.


0 dla odpowiedzi nr 2

Wpadłem na podobny problem. edycja źródła i użycie dynamic_pointer_cast <> rozwiązało problem. W tym przypadku:

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

staje się

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