如何为通用接口编写本机模板化后备存储?

发布于 2024-10-21 07:13:07 字数 268 浏览 2 评论 0原文

比如说,我有一个界面;

public interface ICustomCollection<T>
{
     void Add(T item);
     bool Remove(T item);
     bool Contains(T item);
}

我想创建一个访问本机 C/C++ dll(我也会创建)的类,该类提供了实现。我该如何编写托管类和本机代码才能使其工作?我了解互操作基础知识,但我不知道如何在这种情况下处理泛型类型。

I have an interface, say;

public interface ICustomCollection<T>
{
     void Add(T item);
     bool Remove(T item);
     bool Contains(T item);
}

I would like to create a class that access native C/C++ dll (which I'd also create) which provide the implementation. How can I go about writing the managed class and native code for this to work? I know interop basics but I don't know how to handle generic types in this context.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

祁梦 2024-10-28 07:13:07

当你的想法稍微转变一下,要求 T 是一个从 Object 派生的接口类型(你也应该这么做)时,C++ 接口就变得更加明显了。

When you make a slight shift in your thinking and require that T be an interface type that derives from Object, and you should, then the C++ interface becomes a lot more obvious.

又怨 2024-10-28 07:13:07

这在 Visual Studio 2010 中构建得很好:

template<class T>
public interface class ICustomCollection
{
     virtual void Add(T item);
     virtual bool Remove(T item);
     virtual bool Contains(T item);
};

template<class T>
public ref class GenericCustomCollection : ICustomCollection<T>
{
    virtual void Add(T item){ }
    virtual bool Remove(T item){ return false; }
    virtual bool Contains(T item){ return false; }
};

public ref class ConcreteCustomCollection : ICustomCollection<int>
{
public:
    virtual void Add(int item){ }
    virtual bool Remove(int item){ return false; }
    virtual bool Contains(int item){ return false; }
};

我只是制作了构建所需的最低限度,您可以使用它作为实现的起点。

如果您正在开始使用 C++/CLI,这是一本好书:Expert C++/命令行界面

This builds fine in Visual Studio 2010:

template<class T>
public interface class ICustomCollection
{
     virtual void Add(T item);
     virtual bool Remove(T item);
     virtual bool Contains(T item);
};

template<class T>
public ref class GenericCustomCollection : ICustomCollection<T>
{
    virtual void Add(T item){ }
    virtual bool Remove(T item){ return false; }
    virtual bool Contains(T item){ return false; }
};

public ref class ConcreteCustomCollection : ICustomCollection<int>
{
public:
    virtual void Add(int item){ }
    virtual bool Remove(int item){ return false; }
    virtual bool Contains(int item){ return false; }
};

I just made the minimum needed for it to build, you can use this as a starting point for your implementation.

If you're getting started with C++/CLI, this is a good book: Expert C++/CLI

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文