.net - 托管 C++ 中的数组初始化错误(跟进)

标签 .net c++ managed-c++

跟进我之前的问题。

谁能解释为什么下面的代码编译没有任何错误:

typedef array<VdbMethodInfo^> MethodArray;
typedef array<VdbParameterInfo^> ParameterArray;
ParameterArray^ parameters = gcnew ParameterArray {
    gcnew VdbParameterInfo("name", "string", "Paul")};
MethodArray^ methods = gcnew MethodArray {
    gcnew VdbMethodInfo("createTable", parameters)
};

然而,这给了我“错误 C2440:‘初始化’:无法从‘VdbParameterInfo ^’转换为‘VdbMethodInfo ^”

typedef array<VdbMethodInfo^> MethodArray;
typedef array<VdbParameterInfo^> ParameterArray;
MethodArray^ methods = gcnew MethodArray {
    gcnew VdbMethodInfo("createTable", gcnew ParameterArray {
        gcnew VdbParameterInfo("name", "string", "Paul")};
    )
};

我所做的只是尝试将参数数组“嵌套”在方法数组初始化中...不是直接介意 - VdbMethodInfo 的构造函数采用 ParameterArray 作为第二个参数。

这似乎暗示托管 C++ 数组初始化期望任何递归嵌套具有相同的类型...(即我认为这一定是一个错误)

相关问题:here

最佳答案

我找到了一个变通方法,它使语法更清晰。我使用“...”语法(相当于 C#“params”关键字的托管 C++):

public ref class MetaData
{
    typedef array<VdbMethodInfo^> MethodArray;
    typedef array<VdbParameterInfo^> ParameterArray;
    static ParameterArray^ params(... ParameterArray^ p)
    {
        return p;
    }
public:
    static array<VdbMethodInfo^>^ Instance()
    {
        ParameterArray^ parameters = gcnew ParameterArray { gcnew VdbParameterInfo("name", "string", "Paul")};
        MethodArray^ methods = gcnew MethodArray {
            gcnew VdbMethodInfo("createTable",
                params(gcnew VdbParameterInfo("name", "string", "Paul"),
                       gcnew VdbParameterInfo("age", "number", "25")))
        };

        return methods;
    }
};

关于.net - 托管 C++ 中的数组初始化错误(跟进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835236/

相关文章:

.net - 我的应用程序不受管理。我从哪里开始引入托管代码?

c# - 需要 windows 安全性时下载文件的臭名昭著但尚未解决的问题

.net - .NET 框架中程序集和命名空间之间的关系?

c++ - 问D3DXIntersect函数:(

c# - C++ 调用 Java 代码与 C# 代码的性能

c# - 混淆混合模式程序集或其他保护手段

.net - 如何在没有工作日的情况下从 DateTime 获取长日期格式

c# - 我可以检查事务性 msmq 队列中的项目吗

c++ - 在处理序列化时我应该硬编码变量大小吗? C++

c++ - System.Threading.Tasks 在 UNIX 和 C++ 中等效