以下内容来自EMGU CV文档(摘自here):
DenseHistogram.Calculate<TDepth> Method (Image<Gray, TDepth>[],
Boolean, Image<Gray, Byte>)
以下是来自实际应用程序的示例用法:
dh.Calculate(new Image<Gray, Byte>[] { img[0] }, false, null);
其中dh
已创建为DenseHistogram
。
<TDepth>
的目的是什么(紧跟Calculate
之后)?它没有在示例代码中使用,但似乎没有引起问题,尽管文档中没有任何内容表明它是可选的。
答案 0 :(得分:2)
这是Type
方法的通用Calculate
- 参数,它是generic method。这是一种可以接受任何Type
的方法(在这种情况下 - 对于第二种Image
类型)。可以推断Type
的通用方法 - 不需要明确指定。
这是一个非常简单的例子:
string ArrayLength<T>(T[] a)
{
return a.Length.ToString();
}
并使用:
int[] i = { 1, 2, 3 };
Text = ArrayLength(i);
另一方面,以下内容:
Text = ArrayLength(null);
显示:The type arguments for method 'Test.Form1.Example<T>(T[])' cannot be inferred from the usage.
解决方法是使用:
Text = ArrayLength<int>(null);
(当然,它会在NullReferenceException
属性上抛出Length
。)
答案 1 :(得分:2)
这是generic type parameter,这使得该方法具有通用性。
在示例代码中推断出type参数,即编译器从使用的参数中找出类型参数必须是什么。没有推断出类型参数的完整调用将是:
dh.Calculate<Byte>(new Image<Gray, Byte>[] { img[0] }, false, null);