我试图采用变量变量并将其转换为字符串,以便我可以对数据运行拆分函数.但是,每当我尝试重新定义变体时,我都会遇到类型不匹配错误.我使用了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.
考虑以下两个程序:
#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()>();
}
和
#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()>();
}
海湾合作委员会汇编这两项并输出预期结果.在两种情况下,Clang都不会使用以下错误消息编译它们中的任何一个:
<source>:4:16: error: constexpr function never produces a …我试图构建和运行此存储库增强图像 ,但遇到了此错误。
引起原因:java.lang.RuntimeException:创建sfa时出错。
向下钻取此警告警告!API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'。
从构建日志分析中获得的更多信息,我看到以下错误错误:无法导入“ sampledata / airplane / Airplane.obj”
我试图找到这个地方
variant.getMergeResources()
用于替换它,但是没有运气。
请协助,也许我需要更新插件。我怀疑应该采取哪些步骤才能解决。
我有一个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?
它是设计行为吗?如何解决这个问题?
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] -> …我试图调用COM对象的方法,其中一个记录的参数是"字节数组 ".实际声明取决于您正在查看的每种语言文档:
在C#语言中:
byte[] TransformFinalBlock(
    byte[] inputBuffer,
    int inputOffset,
    int inputCount
)
用C++语言;
array<unsigned char>^ TransformFinalBlock(
    array<unsigned char>^ inputBuffer, 
    int inputOffset, 
    int inputCount
)
用VB语言:
Function TransformFinalBlock ( _
    inputBuffer As Byte(), _
    inputOffset As Integer, _
    inputCount As Integer _
) As Byte()
在F#语言中:
abstract TransformFinalBlock : 
        inputBuffer:byte[] * 
        inputOffset:int * 
        inputCount:int -> byte[] 
我正在使用的对象也可以使用COM访问.该对象提供了一个早期绑定接口ICryptoTransform,它将该方法声明为using SAFEARRAY.
从类型库:
使用IDL语法
[ …泄漏检查程序告诉我内存中有内存泄漏,在以下代码中分配:
// 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 );
其中的"clsObj"是一个IWbemClassObject,它是WMI东西的Microsoft接口.
分配泄漏内存的特定行是"clsObj-> Get"行.然后泄漏检查器报告泄漏本身的更具体的代码(即,在分配泄漏的内存时的堆栈跟踪中),我没有源代码:
(ole32): (filename not available): …我有这种类型:
\n\nstruct 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我也有这个类模板:
\n\ntemplate<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我想container围绕 生成的对象构造mk_immobile(),该immobile对象用于初始化 的变体之一var。
container<immobile> c(mk_immobile());\n然而,这是行不通的。其一,std::variant的构造函数要求std::is_constructible_v<immobile, immobile>,但它不成立。更糟糕的是,即使这个简化版本也失败了:
template<typename T>\nstruct demonstration {\n    T t;\n    template<typename... Args>\n    demonstration(Args&&... …我想写一个通用的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);
}
GCC很高兴从7.1版本开始编译此代码。另一方面,Clang抱怨the的arg.this_r == 0参数if constexpr不是常量,可以回溯到4.0.0版本,但是在当前trunk中仍然存在。
谁在这里,我该如何避免这个问题(假设一个简单的对象if不会被剪裁,因为两个分支之一都无法实例化)?
附录:argClang作为值而不是const左值引用传递,很高兴,但是不幸的是,这不是我的选择。
我最近一直在尝试 C++17 的std::variant和std::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);
有关完整详细信息,请参阅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) …