【问题标题】:How can I use templated generic constraints in C++/CLI如何在 C++/CLI 中使用模板化的通用约束
【发布时间】:2011-11-02 16:43:47
【问题描述】:

我在确定是否可以在 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();
    }
};

这种事情可能吗?

【问题讨论】:

  • 你真正想做什么?

标签: templates generics c++-cli constraints


【解决方案1】:

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

该类应该是模板化的或通用的。见: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&lt;T&gt;,则 typedef 声明将失败,并指出“wrapped 不是 GENCLASS 的成员”。

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多