命名空间 boost::detail (SALOME 7.3.0) 中没有名为“dynamic_cast_tag”的成员

Posted

技术标签:

【中文标题】命名空间 boost::detail (SALOME 7.3.0) 中没有名为“dynamic_cast_tag”的成员【英文标题】:no member named 'dynamic_cast_tag' in namespace boost::detail (SALOME 7.3.0) 【发布时间】:2014-01-05 11:32:04 【问题描述】:

我正在尝试在 OSX Mavericks (Darwin 13.0.0) 上编译 SALOME 7.3.0 并安装了 boost 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 论坛上有类似问题的报告,但没有回复。

【问题讨论】:

看起来缺少包含。仅供参考,不建议直接使用 details 命名空间的成员。 【参考方案1】:

最近对 boost 库的更改取消了 boost::detail::dynamic_cast_tag() 以支持动态转换的新机制。这方面的文档很差,甚至不存在。

你应该能够用旧的提升来构建,我认为 1.44 应该足够了。

【讨论】:

【参考方案2】:

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

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

变成

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

【讨论】:

以上是关于命名空间 boost::detail (SALOME 7.3.0) 中没有名为“dynamic_cast_tag”的成员的主要内容,如果未能解决你的问题,请参考以下文章

Transphorm联手Salom推出符合高通Quick Charge 5标准的100瓦 USB-C PD PPS充电器

使用捆绑属性创建 C++ Boost 图形

使用 boost::asio 获取 UDP 套接字远程地址

提升互斥量抛出(奇怪?)异常

命名空间

C# 常用 命名空间都有哪些 这些命名空间是的作用是?