在名称空间boost :: detail(SALOME 7.3.0)中没有名为'dynamic_cast_tag'的成员

时间:2014-01-05 11:32:04

标签: c++ boost shared-ptr dynamic-cast

我正在尝试在OSX Mavericks(Darwin 13.0.0)上编译SALOME 7.3.0并安装了1.55(使用自制程序)。当尝试定义模板函数时,GCC对SALOME(SRC / DF)中的一个工具包函数进行了阻塞,错误是:

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

代码片段是

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

我不是C ++程序员,因此不仅仅是一点点阻碍。在SALOME论坛上有类似问题的报告,但没有回复。

2 个答案:

答案 0 :(得分:1)

最近对boost库的更改消除了boost :: detail :: dynamic_cast_tag(),支持动态转换的新机制。对此的文档很难到不存在。

你应该能够用更老的推动力来构建,我认为1.44就足够了。

答案 1 :(得分:0)

我遇到了类似的问题。编辑源并使用dynamic_pointer_cast&lt;&gt;解决了这个问题。在这种情况下:

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

成为

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