- 主题:用了一下std::visit,被人说太深奥了
应该没有,主要就是类型吧
【 在 iconquer 的大作中提到: 】
: 有没有deep copy一个 struct 或者 union的功能?
:
--
FROM 114.249.28.*
不会有差异,感觉主要是方便了模板元编程吧
【 在 mango7788 的大作中提到: 】
: 不就是编译器提供了一个type嘛。我猜性能应该也没多大差异。
: 类型安全:std::variant 提供类型安全,而 union 不提供。
: 内存管理:std::variant...
--
修改:gfkid FROM 114.249.28.*
FROM 114.249.28.*
非常赞同你的观点,一些人硬杠挺没意思
【 在 lwp 的大作中提到: 】
: 我说了,有或没有你先撸一个出来,又不是多难的事
: 图像处理数据库的标准太多嫌麻烦,网络,加密,序列化,json这些非常基础的总得弄点吧,一个文件系统库还磨磨唧唧搞到17才有
: 一两家有想法不想用的自己去撸轮子就是了
: 不妨碍标准化的移植性大部分人还是看得上
: 其它语言标准库都整的琳琅满目,就c++的标准库整天缺这个缺那个,我就不理解
--
FROM 61.149.143.*
所以应该早点用 Qt 当标准库啊。这些东东都是 Qt 20 年前就有的。
【 在 gfkid 的大作中提到: 】
: 主要区别
: 类型安全:std::variant 提供类型安全,而 union 不提供。
: 内存管理:std::variant 管理哪种类型当前被存储,而 union 需要程序员手动管理。
: ...................
--
FROM 120.36.238.*
别逗
核心是模板元编程,二十年前c++11还没有呢
【 在 hgoldfish 的大作中提到: 】
: 所以应该早点用 Qt 当标准库啊。这些东东都是 Qt 20 年前就有的。
:
--
FROM 114.249.28.*
很简单啊。用 toInt() 这样的写法就能解决了。内部也无非是一个 void* 指针加上一个 typeid 就齐活了。你可以查一下,QVariant 是 Qt 的 signal/slot 核心,出现在最早期版本的 Qt 里面。
当然,现代的 QVariant 也用了模板元编程。所以 Qt 现在可牛逼了,可以动态地根据 typeid 来申请内存并构造对象。
【 在 gfkid 的大作中提到: 】
: 别逗
: 核心是模板元编程,二十年前c++11还没有呢
--
修改:hgoldfish FROM 120.36.238.*
FROM 120.36.238.*
C++一开始太低级,所以要添加各种API糖、设计模式糖来实现别的语言的语法糖
【 在 z16166 的大作中提到: 】
: 用std::visit访问std::variant。std::variant里的类型以后极可能会扩展。
: 然后有人说深奥了,问我能不能搞点简单的,别搞这种“复杂的”。
--
FROM 116.130.206.*
不如大家分行李散伙吧,都改用Haskell得了
【 在 gfkid 的大作中提到: 】
: 别逗
: 核心是模板元编程,二十年前c++11还没有呢
--
FROM 116.130.206.*
`QVariant` 和 `std::variant` 是两种不同的类,它们都提供了在同一变量中存储不同类型值的能力,但它们的设计理念、功能特性和使用场景有所不同。下面是这两者的主要区别:
### `QVariant`(Qt 框架)
`QVariant` 是Qt框架的一部分,是一种通用类型容器类。它可以保存Qt中的基本类型和用户自定义类型,并且广泛用于Qt框架中,尤其是在与Qt的元对象系统(包括信号和槽机制)交互时。
1. **类型支持**:`QVariant` 支持所有内置的Qt类型以及任何使用 `Q_DECLARE_METATYPE` 宏声明的自定义类型。
2. **运行时类型信息**:`QVariant` 存储类型信息,并在运行时进行类型转换和检查。
3. **与Qt集成**:`QVariant` 与Qt的元对象系统深度集成,使其适合用于Qt的事件系统、属性系统、数据模型等。
4. **灵活性**:`QVariant` 在处理未知类型、动态类型转换和与QML等技术的交互方面更为灵活。
### `std::variant`(C++标准库)
`std::variant` 是C++17中引入的一种类型安全的联合体,可以存储并操作预定义类型中的一种。在C++20中,它提供了更多的功能和更好的性能。
1. **类型安全**:`std::variant` 是类型安全的,访问错误的类型时会抛出异常。
2. **编译时类型信息**:`std::variant` 的类型列表在编译时就已确定,不支持运行时的类型变更。
3. **标准C++**:作为C++标准库的一部分,`std::variant` 与标准C++的其他部分(如标准模板库)良好集成。
4. **性能**:通常`std::variant`性能较高,因为它的类型信息和行为在编译时就已经确定。
### 主要区别
- **集成与兼容性**:`QVariant` 专为Qt设计,与Qt框架紧密集成;`std::variant` 是标准C++库的一部分,与标准C++兼容。
- **类型信息**:`QVariant` 在运行时处理类型信息,而 `std::variant` 的类型在编译时就已确定。
- **类型安全**:`std::variant` 提供了更强的类型安全保证,尽管 `QVariant` 也提供了类型检查和转换的机制。
- **用途**:`QVariant` 更适合与Qt框架一起使用,尤其是在涉及动态类型和Qt的元对象系统时;而 `std::variant` 更适用于需要编译时类型安全和与标准C++库集成的场景。
总的来说,选择使用 `QVariant` 还是 `std::variant` 主要取决于你的项目是否使用Qt,以及你对类型安全和性能的需求。
【 在 hgoldfish 的大作中提到: 】
: 很简单啊。用 toInt() 这样的写法就能解决了。内部也无非是一个 void* 指针加上一个 typeid 就齐活了。你可以查一下,QVariant 是 Qt 的 signal/slot 核心,出现在最早期版本的 Qt 里面。
: 当然,现代的 QVariant 也用了模板元编程。所以 Qt 现在可牛逼了,可以动态地根据 typeid 来申请内存并构造对象。
:
--
FROM 114.249.28.*
为了用selenium学习Python
确实很简单,用起来还方便
【 在 z16166 的大作中提到: 】
: 这还犹豫啥,几个小时就熟悉的事情。剩下的是找合适的库。哈哈
: --
: 发自xsmth (iOS版)
--
FROM 101.82.145.*