【问题标题】:Combining Generics and Templates in C++/CLI在 C++/CLI 中结合泛型和模板
【发布时间】:2021-03-02 10:14:36
【问题描述】:

我目前是 C++/CLI 的新手,作为练习,我想使用非托管代码创建自定义数组类。我在C++ dll 中创建了一个类,并将其命名为CustomArray。它目前是空白的,只有模板和构造函数存在。我把它放在Unmanaged 命名空间内。这是CustomArray 类的完整代码:-

namespace Unmanaged
{
    template <typename T>
    class CustomArray
    {
        private:
            T* m_Data;

        public:
            CustomArray(int size)
            {

            }
    };
}

我在C++/CLI 控制台应用程序中还有一个名为CustomArray 的托管引用类。我想让它使用模板化的CustomArray 非托管代码类。这是Managed 命名空间中CustomArray 类的完整代码:-

namespace Managed
{
    generic <typename T>
    public ref class CustomArray
    {
        private:
            Unmanaged::CustomArray<T>* array;

        public:
            CustomArray(int size)
            {
                
            }
    };
}

但在这里我在声明/定义Unmanaged::CustomArray&lt;T&gt;* 的那一行得到错误。 Visual Studio 说A template argument may not reference a generic type parameter。我不知道这里发生了什么,正如我之前所说的,我是 C++/CLI 的新手。如果有人知道,请帮助我。

【问题讨论】:

    标签: c++ templates generics c++-cli


    【解决方案1】:

    C++ 模板是编译时的,因此构建“模板化”类/方法的所有信息必须在编译时可用。

    C++/CLI 泛型是运行时,即可以在运行时创建泛型类/方法。

    您的泛型类根本无法在运行时创建任意模板类(既不是指向模板类对象的指针)。

    参考:Generics and Templates (C++/CLI) 来自 Microsoft。

    请注意C++/CLI 的目的是提供本机代码和.NET 代码之间的互操作性,最好避免在C++/CLI 中实现业务逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 2020-07-07
      • 1970-01-01
      相关资源
      最近更新 更多