我在弄清楚是否可以在 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/