标签: variant

将Variant数组转换为String

我试图采用变量变量并将其转换为字符串,以便我可以对数据运行拆分函数.但是,每当我尝试重新定义变体时,我都会遇到类型不匹配错误.我使用了CStr(),Str()和ToString函数.没有工作.

我错过了什么?

Function FlatLine(ByVal lines As Variant)

Dim flat() As String
ReDim Preserve flat(i)

For i = 0 To UBound(lines)
    flat(UBound(flat)) = lines(i)
    ReDim Preserve flat(LBound(flat) To UBound(flat) + 1)
Next i

Dim flat2 as String
flat2 = Cstr(flat)

^ errors there.
Run Code Online (Sandbox Code Playgroud)

vba variant

7
推荐指数
1
解决办法
2万
查看次数

constexpr中的std :: variant修改

考虑以下两个程序:

#include<variant>
#include<iostream>

constexpr auto f() {
    using T = std::variant<bool, int>;
    T t(false);
    t = T(true);
    return std::get<bool>(t);
}

template<auto V> 
void print() { std::cout << V << "\n"; }

int main() {
    print<f()>();
}
Run Code Online (Sandbox Code Playgroud)

#include<variant>
#include<iostream>

constexpr auto f() {
    using T = std::variant<bool, int>;
    T t(false);
    t = T(42);
    return std::get<int>(t);
}

template<auto V> 
void print() { std::cout << V << "\n"; }

int main() {
    print<f()>();
}
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会汇编这两项并输出预期结果.在两种情况下,Clang都不会使用以下错误消息编译它们中的任何一个:

<source>:4:16: error: constexpr function never produces a …
Run Code Online (Sandbox Code Playgroud)

c++ variant constexpr c++17

7
推荐指数
1
解决办法
519
查看次数

Android Gradle插件(警告)API'variant.getMergeResources()'已过时,并已替换为'variant.getMergeResourcesProvider()'

我试图构建和运行此存储库增强图像 ,但遇到了此错误。

引起原因:java.lang.RuntimeException:创建sfa时出错。

向下钻取此警告警告!API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'

从构建日志分析中获得的更多信息,我看到以下错误错误:无法导入“ sampledata / airplane / Airplane.obj”

我试图找到这个地方

variant.getMergeResources()
Run Code Online (Sandbox Code Playgroud)

用于替换它,但是没有运气。

请协助,也许我需要更新插件。我怀疑应该采取哪些步骤才能解决。

plugins android variant gradle arcore

7
推荐指数
1
解决办法
1943
查看次数

从EndOfTheMonth(date)到Variant值的转换错误

我有一个TDateTime值(我得到的结果EndOfTheMonth(date))变量类型.结果错误地四舍五入.我们来看看例子:

  data := EndOfTheMonth(date);
  V := data;
  ShowMessage(DateTimeToStr(data) + ' vs ' + VarToStr(V));
 // output is
 // data = 2012-01-31 23:59:59
 // v    = 2012-02-01            // why next day?
Run Code Online (Sandbox Code Playgroud)

它是设计行为吗?如何解决这个问题?

delphi datetime rounding variant delphi-xe2

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

OCaml函数超过多态变体不够多态?

OCaml给出function `A -> 1 | _ -> 0了类型[> `A] -> int,但为什么不是这样[> ] -> int

这是我的理由:

  • function `B -> 0有类型[<`B] -> int.添加`A -> 0分支以使其function `A -> 1 | `B -> 0松散[<`A|`B] -> int.该函数在它可以接受的参数类型中变得更加宽松.这是有道理的.
  • function _ -> 0有类型'a -> int.这种类型是统一的[> ] -> int,并且[> ]是一种已经开放的类型(非常宽松).添加`A -> 0分支以使其将类型function `A -> 1 | _ -> 0 限制[>`A] -> …

polymorphism ocaml type-inference variant

6
推荐指数
2
解决办法
665
查看次数

如何通过IDispatch将SAFEARRAY传递给COM对象?

我试图调用COM对象的方法,其中一个记录的参数是"字节数组 ".实际声明取决于您正在查看的每种语言文档:

我正在使用的对象也可以使用COM访问.该对象提供了一个早期绑定接口ICryptoTransform,它将该方法声明为using SAFEARRAY.

类型库:

com winapi variant safearray

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

C++泄漏VARIANT/bstrVal代码

泄漏检查程序告诉我内存中有内存泄漏,在以下代码中分配:

// Get the value from the object as a variant.
VARIANT vVal;
VariantInit ( &vVal );
hres = clsObj->Get ( fieldName.c_str(), 0, &vVal, 0, 0 );
if ( FAILED ( hres ) )
{
    (... various cleanup / throw stuff ...)
}

// And get it as a wstring.
wstring val ( vVal.bstrVal );

(... do some standard, non-memory leaking stuff with the wstring ...)    

// Clean up.
VariantClear ( &vVal );
Run Code Online (Sandbox Code Playgroud)

其中的"clsObj"是一个IWbemClassObject,它是WMI东西的Microsoft接口.

分配泄漏内存的特定行是"clsObj-> Get"行.然后泄漏检查器报告泄漏本身的更具体的代码(即,在分配泄漏的内存时的堆栈跟踪中),我没有源代码:

(ole32): (filename not available): …
Run Code Online (Sandbox Code Playgroud)

c++ com memory-leaks bstr variant

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

如何使用 std::variant 保证复制省略?

我有这种类型:

\n\n
struct immobile {\n   // other stuff omitted\n   immobile(immobile&) = delete;\n   immobile(immobile&&) = delete;\n};\nimmobile mk_immobile();\n// e.g. this compiles\n// mk_immobile() is a prvalue and i is its result object\nimmobile i(mk_immobile());\n
Run Code Online (Sandbox Code Playgroud)\n\n

我也有这个类模板:

\n\n
template<typename T>\nstruct container {\n    std::variant<T, other_stuff> var;\n    template<typename... Args>\n    container(Args&&... args)\n    : var(std::in_place_index<0>, std::forward<Args>(args)...) {}\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想container围绕 生成的对象构造mk_immobile(),该immobile对象用于初始化 的变体之一var

\n\n
container<immobile> c(mk_immobile());\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,这是行不通的。其一,std::variant的构造函数要求std::is_constructible_v<immobile, immobile>,但它不成立。更糟糕的是,即使这个简化版本也失败了:

\n\n
template<typename T>\nstruct demonstration {\n    T t;\n    template<typename... Args>\n    demonstration(Args&&... …
Run Code Online (Sandbox Code Playgroud)

c++ variant copy-elision c++17

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

lang声称通用lambda参数的constexpr成员不是constexpr

我想写一个通用的lambda作为变体的访客。此变体的成员包含constexpr成员值,我想在访问者中使用它。例如:

#include <variant>

template<int r>
struct S {
    constexpr static int this_r = r;
};

int f(std::variant<S<0>, S<1>, S<2> > v) {
    return std::visit([](auto const& arg) {
        if constexpr(arg.this_r == 0) { return 42; }
        else { return arg.this_r; }
    }, v);
}

int g() {
    std::variant<S<0>, S<1>, S<2> > x = S<2>();
    return f(x);
}
Run Code Online (Sandbox Code Playgroud)

GCC很高兴从7.1版本开始编译此代码。另一方面,Clang抱怨the的arg.this_r == 0参数if constexpr不是常量,可以回溯到4.0.0版本,但是在当前trunk中仍然存在。

谁在这里,我该如何避免这个问题(假设一个简单的对象if不会被剪裁,因为两个分支之一都无法实例化)?

附录:argClang作为值而不是const左值引用传递,很高兴,但是不幸的是,这不是我的选择。

c++ variant generic-lambda c++17

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

用于访问多态类型的 std::visit 类函数

我最近一直在尝试 C++17 的std::variantstd::visit,我发现它非常强大。我特别喜欢在多个变体对象上创建访问者模式的能力。这是我的意思的一个例子:

std::variant<int, float, char> v1 { 's' };
std::variant<int, float, char> v2 { 10 };

std::visit(overloaded{
        [](int a, int b) { },
        [](int a, float b) { },
        [](int a, char b) { },
        [](float a, int b) { },
        [](auto a, auto b) { }, // << default!
    }, v1, v2);
Run Code Online (Sandbox Code Playgroud)

有关完整详细信息,请参阅https://www.bfilipek.com/2018/09/visit-variants.html。鉴于此,我想知道是否可以基于多态类型而不是变体对象编写类似的代码。

想一想我们使用动态多态和父对象来编写通用接口的场景。然后我们要实现依赖于几种多态类型的某个功能,即像

void fun(IFoo* ptr_foo, IBar* ptr_bar) {
  {
    Foo1* child_foo = dynamic_cast<Foo1*>(ptr_foo);
    Bar1* child_bar = dynamic_cast<Bar1*>(ptr_bar);
    if(child_foo && child_bar) …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism visitor variant

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