相关疑难解决方法(0)

成员初始化列表:从返回元组的函数初始化两个成员

可以通过函数获取的元组在成员初始化列表中初始化多个成员吗?

通过元组返回多个值变得越来越流行,我希望有一个解决方案.我认为除了语言限制之外没有任何理由为什么这是不可能的.


这是我所拥有的:

auto new_foo(std::size_t size) -> std::tuple<std::unique_ptr<char[]>, int*>
{
    auto buffer = std::make_unique<char[]>(size * sizeof(int) + 8);
    auto begin = static_cast<int*>(static_cast<void*>(buffer.get() + 4));
    return std::make_tuple(std::move(buffer), begin);
}

struct X {
    std::unique_ptr<char[]> buffer_{nullptr};
    int* begin_{nullptr};
    std::size_t size_{0};

    X(std::size_t size) : size_{size}
    {
        std::tie(buffer_, begin_) = new_foo(size);
    }
};
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?:

    X(std::size_t size)
        : buffer_{ ??? },
          begin_{ ??? },
          size_{size}
    {
    }
Run Code Online (Sandbox Code Playgroud)

我无法new_foo 为每个成员初始化调用一次(因为它会在每次调用时返回另一个元组).所以

    X(std::size_t size)
        : buffer_{std:get<0>(new_foo(size)},
          begin_{std:get<1>(new_foo(size)},
          size_{size}
    {
    }
Run Code Online (Sandbox Code Playgroud)

这是不可能的(即使不是这种情况,多次调用以获得相同的结果也不是最佳的)

我想到的另一个解决方案是将成员作为一个元组.我放弃了,因为我需要在类中正确命名的两个成员,而不是使用get<0>和访问get<1>. …

c++ tuples initialization-list c++14 c++17

7
推荐指数
1
解决办法
376
查看次数

标签 统计

c++ ×1

c++14 ×1

c++17 ×1

initialization-list ×1

tuples ×1