【问题标题】:Why is Aws::String not extending std::string为什么 Aws::String 不扩展 std::string
【发布时间】:2021-11-01 04:03:24
【问题描述】:

我们之前在本地构建了aws-sdk-cpp,并围绕它设计了一个库。现在我正在升级以使用柯南提供的 aws-sdk-cpp 而不是本地构建的,但我从我们的库中收到错误。

我调用AWS函数如下,

std::string src_bucket;
DeleteObject
// ...

obj.WithBucket(src_bucket).WithDelete(std::move(del));

但我收到这样的错误。

error: no matching function for call to 'Aws::S3::Model::DeleteObjectsRequest::WithBucket(const string&)`.

此函数调用是否已更改为现在允许std::string?有没有办法让 AWS 方法接受std::string

【问题讨论】:

    标签: conan aws-sdk-cpp


    【解决方案1】:

    有没有办法让 AWS 方法接受 std::string?

    是的。这些函数接受 std::string if custom memory management is disabled:

    如果启用(打开)编译时常量,则类型解析为使用连接到 AWS 内存系统的自定义分配器的 STL 类型。

    如果禁用(关闭)编译时常量,则所有 Aws::* 类型都解析为相应的默认 std::* 类型。

    看起来前者是你得到的,而后者是你所期望的——也许你已经从静态链接 SDK(默认关闭)切换到动态链接 SDK(默认开启)?

    无论如何,您要么必须以某种方式构建 SDK,禁用自定义内存管理,要么自己使用 Aws::String 之类的类型,要么自己使用 convert between Aws::String and std::string as needed

    【讨论】:

    • 柯南库没有设置 BUILD_SHARED_LIBS CMake 定义,即使 aws-sdk-cpp:shared Conan 选项设置为 False
    • 柯南可能只会在aws-sdk-cpp:shared=True 时设置BUILD_SHARED_LIBS=ON,因为相反是默认设置,并且预计不会被库 CMakeLists.txt 设置为 OFF。我认为新的CMakeToolchain 集成根据options.shared 值将其设置为OFF 和ON。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2018-12-03
    • 1970-01-01
    • 2022-01-20
    • 2014-10-24
    • 2021-12-31
    • 2017-11-22
    相关资源
    最近更新 更多