我在查明是否可以在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();
}
};
这种事情有可能吗?
答案 0 :(得分:3)
您不能在同一声明中将模板与泛型混合使用。
该类应该是模板化的或通用的。请参阅: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
声明将失败,说“wrap不是GENCLASS的成员”。