variant 相关问题

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

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

检查 VBA 中的空数组索引(可以包含对象)

我需要对 Variant 数组执行 is Nothing 检查,以排除使用空索引。我使用什么都不捕获保存(空)对象的空索引,它工作正常,但对于......

回答 2 投票 0

如何将 is_invocable 与变体和 std::holds_alternative 一起使用

如果我有一个变体值: 使用 Value = std::variant; 那么 std::holds_alternative() 应该可以用这些类型调用,但不能用其他类型调用: 值 v; 如果(std::holds_alternative 如果我有变体Value: using Value = std::variant<bool, float>; 那么 std::holds_alternative() 应该可以用这些类型来调用,但不能用其他类型来调用: Value v; if (std::holds_alternative<bool>(v))... // compile ok if (std::holds_alternative<float>(v))... // compile ok if (std::holds_alternative<int>(v))... // compile error 给定类型 T,我如何检查 std::holds_alternative<T>(const Value&) 是否可调用? 我想做这样的事情 template<class T> void check() { if (std::is_invocable_v<decltype(std::holds_alternative<bool>), const Value&>) { std::cout << "callable"; } else { std::cout << "not callable"; } } 但这不会编译,因为我认为它实例化了 std::holds_alternative<bool> 而不考虑 Value 部分。 这里正确的语法是什么?谢谢 遗憾的是,std::holds_alternative 不适合 SFINE,因此没有好方法直接用 check 编写 std::holds_alternative 函数。相反,您可以根据 std::holds_alternative 的基本要求来实现它,即给定类型在变体的类型列表中只出现一次: template <typename T, typename... Ts> constexpr std::size_t count_in_pack() { std::array<bool, sizeof...(Ts)> a = { std::is_same_v<T, Ts>... }; return std::count(a.begin(), a.end(), true); } template <typename... Ts> void check(const std::variant<Ts...>&) { if (count_in_pack<bool, Ts...>() == 1) { std::cout << "callable\n"; } else { std::cout << "not callable\n"; } };

回答 1 投票 0

Ocaml 类型错误(变体/模式匹配)

尝试做一个简单的模式匹配变体,这将为我提供二叉树节点字符串的有序连接,但在递归实现中出现错误: 输入 btnode = |叶子 ...

回答 1 投票 0

如何在Python中通过电子邮件发送变体?

如何使用 python 通过电子邮件发送变体?电子邮件已发送,但未包含变体。这是代码: \`导入 email.message 导入 os 导入 smtplib 导入 sys def restart_program(): pyth...

回答 1 投票 0

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