variant 相关问题

变体数据类型是包含其他数据类型的标记联合。它是[ocaml]中的标准数据类型,通常用于经典Microsoft Windows [com]编程中的语言([c ++]和[vb6])之间的互操作调用。它也存在于使用其他名称的其他语言中,例如[区别联盟]或[代数数据类型]的更一般概念

如何实现 std::variant 包装类的隐式转换和运算符?

我正在尝试实现 std::variant 包装器,在分配和创建方面其行为与 std::variant 类似,但也允许隐式转换为变体持有的所有替代项。

回答 2 投票 0

我不明白带有包扩展的 lambda std::array 的初始化

我发现以下代码(由 phoeen 编写)在运行时实例化基于索引的变体: 模板 std::variant make_variant(std::size_t i) { 断言(我 < s...

回答 1 投票 0

C++ 变体访问重载函数

我想在变体上执行重载函数。以下代码块可以工作并编译,但访问调用似乎过于复杂。为什么我不能简单地写: std::访问(&f,

回答 4 投票 0

std::variant 函数中的多个返回类型

我正在尝试检索存储在具有变体类型的返回变量中的值,但我正在努力使其工作。你有什么想法? :) 我几乎尝试了一切,包括临时...

回答 1 投票 0

VBA - 为什么 For Each 迭代器需要变体

为什么 VBA 编译器要求 For Each 迭代器的类型为 Variant? 例如,这段代码会抛出错误: 公共子迭代测试() Dim arr(1 到 4) 作为字符串 将 str 调暗为字符串 arr(1) = &

回答 1 投票 0

Rails Active Storage:如何创建由用户提供的坐标裁剪的“命名变体”

我有类似的东西: 用户类 < ApplicationRecord has_one_attached :avatar do |attachable| attachable.variant :large, resize_to_limit: [300, nil] attachable.variant :medium,

回答 3 投票 0

使用bcftools合并2个VCF文件,但是我应该如何根据2个VCF文件更新字段

我使用 bcftools merge 来合并 2 个 VCF 文件,但是,当我看到合并的 VCF 文件时,我没有看到更新的字段。假设我在 1 个 VCF 文件中运行 2 个不同的样本,并且 2 个样本...

回答 1 投票 0

gcc/msvc 编译以下内容,clang 则不会。有解决办法吗?

#包括 #包括 #包括 // A 静态断言( 标准::可选< std::vector< int > >{ std::vector< int >{ 1, 2, 3 } ...

回答 1 投票 0

VARIANT 数据结构到底是什么?

我正在学习Microsoft OLE Automation和COM,它使用VARIANT来传递数据。我读过它是联合数据结构,但没有找到足够的信息。 这会有帮助的...

回答 2 投票 0

如何访问 VARIANT 结构中的 uint64?

如何访问 VARIANT 结构中的 uint64? 例如: 变体 vtProp{}; hres = pclsObj->Get(L"FreeSpaceInPagingFiles", 0, &vtProp, 0, 0); strSystemInfo.AppendFormat(L" 自由空间...

回答 1 投票 0

如何在 C++ 中深度复制指针的变体?

我有一个 std::variant,其替代品都是指针。 A类{ 民众: int* 占位符; a(a& _copy) { /* 进行深层复制 */ } } B类{ // 出于演示目的,

回答 1 投票 0

适用于范围和数组的 VBA 函数

我正在尝试编写一个 UDF,它从用户处获取范围或数组并对其进行迭代。如果我将其声明为一个范围,如下所示: 功能测试(参数作为范围)作为变体 总体暗淡如...

回答 1 投票 0

结构体的隐式转换

这是我的结构,它在创建变量时使用隐式转换。 #包括 #包括 使用命名空间 std; 使用 val = 变体 这是我的结构,它在创建变量时使用隐式转换。 #include <string> #include <variant> using namespace std; using val = variant<int, string, double, bool, long, long long, long double>; struct value { val innerVal; value():innerVal(""){} value(const val &c) : innerVal(c) {} template <typename T> operator T() { return get<T>(innerVal); } template <typename V> value &operator=(const V &t) { innerVal = t; return *this; } }; 这就是我在构造变量时使用它的方式,它工作正常,但是当我将已创建的变量分配给 value 结构时,它会给出错误。 int main(int argc, char* argv[]) { value h; h = "String"; string m = h;// Here works fine string b = "different"; b = h;//Here it gives error } 编译错误 use of overloaded operator '=' is ambiguous (with operand types 'std::__ndk1::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') and 'value') b = h; 我想隐式构造变量而不会遇到此错误,有人可以解释如何解决此问题。 分配 b = h 不明确,因为 std::string 具有不同的 operator=。因为您有一个模板化转换运算符,所以您的编译不知道要采用哪个重载的 operator= 或 std::string。 您可以限制 value 允许的转换类型,以仅允许隐式转换为成员 variant 的类型之一。以下结构体将使用折叠表达式提供一个布尔值,告诉我们类型 T 是否包含在 Type 的模板参数中: template<typename, typename> struct has_template_param; template<typename T, template<typename ...> typename Type, typename ...Ts> struct has_template_param<T, Type<Ts...>> { static constexpr bool value = (... || std::is_same_v<T, Ts>); }; 然后可以使用 SFINAE 来约束模板化转换运算符: template<typename T, typename = std::enable_if_t<has_template_param<T, val>::value>> operator T() { return std::get<T>(innerVal); } 使用C++20概念,可以通过更方便地完成 template<typename T, typename Type> concept has_param = has_template_param<T, Type>::value; 和 template<has_param<val> T> operator T() { return std::get<T>(innerVal); } 查看演示

回答 1 投票 0

带有匿名联合的 C++ 结构体

---- 已更新 ------------------------------------------ - 起初,我认为我面临的问题是trivially_copyable。事实上,即使我放弃让它变得trivially_copyable,它仍然不能是

回答 1 投票 0

如何访问仅限于同一类型的多个变体

我有一个关于使用排除非相等类型的通用访问者的问题。假设我有以下内容: 使用 StorageT = std::variant, std::vector&g...

回答 2 投票 0

存储数组与单值比较

此代码来自另一个工作簿,该工作簿将动态值的列 A6:A50 存储到数组中,当它们更改时比较它们的差异并将它们的差异打印到 Sheet2

回答 1 投票 0

VBA 问题 - 存储数组与单个值

此代码来自另一个工作簿,该工作簿将动态值的列 A6:A50 存储到数组中,当它们更改时比较它们的差异并将它们的差异打印到 Sheet2

回答 1 投票 0

VBA 问题 - 存储数组/单值

此代码来自另一个工作簿,该工作簿将动态值的 A6:A50 列存储到数组中,当它们更改时比较它们的差异并将它们的差异打印到 Sheet2

回答 1 投票 0

std::variant 和 std::visitor 是否意味着我的代码可以在编译时解析?

我有两个结构A和B共享相同的接口foo 我希望能够根据上下文使用 A 或 B,因此使用 std::variant 似乎在这里很有趣。 结构 C 封装...

回答 1 投票 0

如果分配了 1 个或多个值,则获取单元格的值

如果我的 A 列和 B 列中的 SHEET1 的单元格具有 2 个或更多值,并且使用以下代码,我该如何修复此问题:(我没有任何问题) Dim LineNumbers() 作为变体 行号 = 范围("A1&...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.