是否可以创建类类型,即:
他们会是什么样的?
这个问题对于开发std::variant-like或std::tuple-like类是有意义的。
这个问题是在通过这篇文章后提出的。
发布于 2016-09-21 08:01:45
来回答我认为是你问题的核心:
这个问题对于开发std::variant或std::tuple类类是有意义的。
这里有三种不同的类类型。
在下面的假设中,“赋值&构造”后缀都是用于移动/复制的。我将把非平凡的操作称为克隆:
所有者类型:这些是可移动的&可复制的(深拷贝或浅拷贝是要做的选择)刻板印象的例子是std::unique_ptr, std::shared_ptr
正则类型(int-like):-这些是可移动和可复制的。典型的例子是int,std::vector。有关这些类型的更多细节,可以在什么是移动语义上下文中的“正则类型”? &在编程元素中找到。
其他类型(函数、Mutexes等):这些类型拒绝放入上面的清洁类中。函数可以引用指针、具有捕获信息的lambda等。
至于所有其他的组合的琐碎复制/移动是关心的,而你可以创建这样的类,我认为他们更像好奇心,而不是你会看到的东西,在任何有用的场景。
我将std::向量放在常规类型中,而不是所有者类型中,尽管std::vector管理内存,因为它的接口设计得尽可能接近常规类型。您通常可以为一种表面上非规则的类型设计一个常规的接口。在这种情况下,如果使用常规接口,有关代码的推理就更容易了。
发布于 2016-09-21 05:02:56
你需要在5点的时候更清楚。
琐碎意味着(除其他外)不是用户提供的。因此,只需显式地编写默认实现,就可以从琐碎到非平凡的东西。
http://eel.is/c++draft/class#class!trivially可复制
http://eel.is/c++draft/class.copy#25
https://stackoverflow.com/questions/39607635
复制相似问题