std shared_pointer_cast未定义

时间:2017-05-27 13:53:36

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

我正在尝试在apache arrow C ++ example中记下的示例示例。 该示例使用共享尖头转换如下(代码片段)

版本

static synchronized

代码

SELECT REPLACE('"test"','"','"')

编译标志

但是,当我用下面的标志编译代码时,我得到了未定义的错误。

void foo(void) {
#if TARGET_CPU_ARM64
    __asm ("sub        sp, sp, #0x60");
    __asm ("str        x29, [sp, #0x50]");
#endif
}

错误

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; }

的任何文档

问题

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

1 个答案:

答案 0 :(得分:3)

根据您的意图,您应该使用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不执行运行时检查。如果您知道引用特定类型的对象,则应使用此方法,因此不需要进行检查。它还用于避免隐式转换&amp;而是明确地说明

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

Regular cast是一个C风格的演员表,它结合了所有const_caststatic_castreinterpret_cast,但它也不安全。

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