templates - 如何在 C++/CLI 中使用模板化的通用约束

标签 templates generics c++-cli constraints

我在弄清楚是否可以在 C++/CLI 中使用模板化通用约束时遇到了一些麻烦。这是一个例子

template<typename T>
public ref class wrapped 
{
public:
    T* t;

    T doTthing(){return *t;}
};

这是一个简单的模板化托管类,包装了一个非托管类型 T。我可以使用这个类作为泛型的约束
// works
generic<class genclass> where genclass : wrapped<int>
public ref class testclass3
{
public:
    genclass gc;

    int test()
    {
        return gc->doTthing();
    }
};

这工作正常。我无法弄清楚的是如何同时保留模板和通用,即
//Does Not Work!
template<typename T>
generic<class genclass>  where genclass : wrapped<T>
public ref class testclass4
{
public:
    genclass gc;

    T test()
    {
        return gc->doTthing();
    }
};

这种事情可能吗?

最佳答案

您不能在同一个声明中将模板与泛型混合使用。

该类应该是模板化的或通用的。见:Managed Templates

模板更具有表现力,因此我建议您改用它们。

如果你想模拟一个约束(顺便说一下,同样的技术可以在 c++ 中工作..)你可以这样做:

template<class T, class GENCLASS>
public ref class testclass4
{
private:
    typedef typename GENCLASS::wrapped<T> Constraint1;
public:
    genclass gc;

    T test()
    {
        return gc->doTthing();
    }
};

如果该类不是从 wrapped<T> 继承的然后是 typedef声明将失败,说“wrapped 不是 GENCLASS 的成员”。

关于templates - 如何在 C++/CLI 中使用模板化的通用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984051/

相关文章:

html - 在 Django 中为 <table> 设置列宽

c++ - 错误: "couldn' t infer template argument '_Tp' "when passing in {} into

java - 类转换异常 : Subclass Implementation is throwing Exception while invoking Superclass method

c# - 为什么在没有 new() 泛型类型约束的情况下允许 Activator.CreateInstance<T>() ?

java 8 lambda 泛型比较器 - 编译器警告

c++ - 从可变参数模板类中特化一个函数

c++ - 模板函数不是命名空间的成员

visual-studio - 将现有表单添加到 C++/CLI WinForms 项目

c++ - strcpy System.AccessViolationException 异常

c# - 选择/拾取在 Direct2D 中应该如何工作?