c++ - std shared_pointer_cast 未定义

标签 c++ c++11 shared-ptr

我正在尝试在 apache arrow C++ example 中记录的示例示例。 该示例使用共享指向强制转换,如下所示(代码片段)

版本

g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3aka8.0.2) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

代码

int main()
{
        Int64Builder builder(arrow::default_memory_pool(), arrow::int64());
        builder.Append(8);

        std::shared_ptr<Array> array;
        builder.Finish(&array);

        std::shared_ptr<Int64Array> int64_array = std::shared_pointer_cast<Int64Array>(array);


        return 0;
}

编译标志

但是,当我使用以下标志编译代码时,出现未定义的错误。

g++ example.cpp -O2 -std=c++11 -I/workspace/arrow/arrow-master/cpp/src  -L/workspace/arrow/arrow-master/cpp/release/release  -larrow -larrow_jemalloc  

错误

example.cpp: In function 'int main()':
example.cpp:24:44: error: 'shared_pointer_cast' is not a member of 'std'
  std::shared_ptr<Int64Array> int64_array = std::shared_pointer_cast<Int64Array>(array);
                                            ^
example.cpp:24:79: error: expected primary-expression before '>' token
  std::shared_ptr<Int64Array> int64_array = std::shared_pointer_cast<Int64Array>(array);

我没有看到任何关于 std::shared_pointer_cast 的文档

问题

  1. 我错过了什么吗?这个代码在 C++11 版本中是可编译的吗?
  2. C++11 版本中有哪些替代方案?

最佳答案

您应该根据您的意图使用 static_pointer_castdynamic_pointer_cast

以下是 C++ 11 支持的所有类型转换:

http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast

但是,C++11 中没有所谓的 std::shared_pointer_cast

此外static_cast应该为你工作。尝试使用 static_cast 而不是 std::shared_pointer_cast

使用强制转换时要考虑的要点:

static_cast 不执行运行时检查。如果您知道引用特定类型的对象,则应该使用此方法,因此不需要进行检查。它还用于避免隐式转换,而是使其显式转换

dynamic_cast 用于您不知道对象的动态类型是什么的情况。如果进行向下转换并且参数类型不是多态的,则不能使用dynamic_cast。一个例子:

常规强制转换是一种C风格强制转换,它结合了所有const_caststatic_castreinterpret_cast,但是这也是不安全的。

看看this answer了解有关 C++ 中使用的强制转换的更多信息。

关于c++ - std shared_pointer_cast 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217668/

相关文章:

c++ - 小部件不在 Gtk 窗口内

c++ - OpenCV 3 似乎不适用于 Qt

c++ - 使用浮点文字初始化 const int

C++ 枚举重新定义和 C++0x

c++ - "single allocation"对 boost::make_shared 意味着什么

c++ - 使用 C++ 处理 iPhone 中的触摸检测?

c++ - Cygwin: g++ 5.2: ‘to_string’ 不是 ‘std’ 的成员

c++ - Visual Studio 无法在 bool 运算的上下文中实例化强制转换(转换)运算符模板 (T=bool)

c++ - 关于 shared_ptr 引用计数 block

c++ - shared_ptr<T> 如何检测到 T 派生自 enable_shared_from_this<T>?