std::piecewise_construct, std::piecewise_construct_t

来自cppreference.com
< cpp‎ | utility
 
 
 
 
在标头 <utility> 定义
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
(1) (C++11 起)
constexpr std::piecewise_construct_t piecewise_construct{};
(2) (C++11 起)
(C++17 起 inline)
1) std::piecewise_construct_t 是一个空类标签类型,用于区分接受两个元组实参的不同函数。
2) 常量 std::piecewise_construct(1) 的实例。

不使用 std::piecewise_construct_t 的重载假定每个元组实参都成为对偶的元素。使用 std::piecewise_construct_t 的重载假定每个元组实参被用于逐段构造指定类型的新对象,它们将成为对偶的元素。

[编辑] 标准库

下列标准库类型和函数将它用作区分标签:

实现二元组,即一对值
(类模板) [编辑]
准备好与给定类型所要求的使用分配器构造的形式向匹配的实参列表
(函数模板) [编辑]
由重复产出同一值生成的序列组成的 view
(类模板) (定制点对象) [编辑]

[编辑] 示例

#include <iostream>
#include <tuple>
#include <utility>
 
struct Foo
{
    Foo(std::tuple<int, float>)
    {
        std::cout << "从元组构造 Foo\n";
    }
 
    Foo(int, float)
    {
        std::cout << "从 int 和 float 构造 Foo\n";
    }
};
 
int main()
{
    std::tuple<int, float> t(1, 3.14);
 
    std::cout << "创建 p1...\n";
    std::pair<Foo, Foo> p1(t, t);
 
    std::cout << "创建 p2...\n";
    std::pair<Foo, Foo> p2(std::piecewise_construct, t, t);
}

输出:

创建 p1...
从元组构造 Foo
从元组构造 Foo
创建 p2...
从 int 和 float 构造 Foo
从 int 和 float 构造 Foo

[编辑] 参阅

构造新的 pair
(std::pair<T1,T2> 的公开成员函数)