小编Ευά*_*τος的帖子

如何安全地复制具有 `std::variant` 成员的类?

以下示例在Container container2(container1);删除该行的情况下构建并正常运行。似乎std::variant删除了自身的复制构造函数,这使得 myContainer的复制构造函数被隐式删除。

实际上,我在问:

  1. 将 a 存储std::variant为成员的正确方法是什么?
  2. Container允许安全复制/移动分配之前必须实现什么?
#include <string>
#include <variant>

class A {};

class Container {
 public:
  Container(int i) : data_(i) {}
  Container(float f) : data_(f) {}
  Container(std::string s) : data_(s) {}
  Container(std::unique_ptr<A> a) : data_(std::move(a)) {}
  std::variant<int, float, std::string, std::unique_ptr<A>> data_;
};

int main() {
  Container container1{3};
  
  // error: call to implicitly-deleted copy constructor of 'Container'
  // 
  // copy constructor of 'Container' is implicitly deleted because
  // …
Run Code Online (Sandbox Code Playgroud)

c++ c++17 std-variant

6
推荐指数
1
解决办法
347
查看次数

标签 统计

c++ ×1

c++17 ×1

std-variant ×1