मैं एक लीनियरइंटरपोलेटर वर्ग लिखना चाहता हूं, जहां एक्स एक्स अक्ष मान का प्रकार है, और वाई वाई अक्ष मान का प्रकार है। मैं यह नहीं देख सकता कि ऐसा कैसे करें कि एक्स डेटटाइम या डबल हो सकता है। वर्ग नीचे की तरह कुछ (जो अपरीक्षित है):एक सामान्य रैखिक इंटरपोलेटर: डेटटाइम से कैसे निपटें?
class LinearInterpolator<X, Y>
{
private List<X> m_xAxis;
private List<Y> m_yAxis;
public LinearInterpolator(List<X> x, List<Y> y)
{
m_xAxis = x;
m_yAxis = y;
}
public Y interpolate(X x)
{
int i = m_xAxis.BinarySearch(x);
if (i >= 0)
{
return m_yAxis[i];
}
else
{
// Must interpolate.
int rightIdx = ~i;
if (rightIdx >= m_xAxis.Count)
--rightIdx;
int leftIdx = rightIdx - 1;
X xRight = m_xAxis[rightIdx];
X xLeft = m_xAxis[leftIdx];
Y yRight = m_yAxis[rightIdx];
Y yLeft = m_yAxis[leftIdx];
// This is the expression I'd like to write generically.
// I'd also like X to be compilable as a DateTime.
Y y = yLeft + ((x - xLeft)/(xRight - xLeft)) * (yRight - yLeft);
return y;
}
}
}
}
यह C++ आसान होगा, लेकिन मैं इतना किसी भी मदद की सराहना की जाएगी सी # जेनरिक के लिए नया हूँ।
आदर्श रूप से यह काम करेगा, लेकिन चूंकि 'टाइमस्पेन' टाइमस्पेन/टाइमस्पेन -> डबल 'या' टाइमस्पेन * डबल -> टाइमस्पेन 'का समर्थन नहीं करता है (कारणों से जिन्हें समझदार भी माना जा सकता है) मुझे लगता है कि आप बाहर हैं ठंड में। आप अंतराल प्राप्त करने के लिए समय घटा सकते हैं और उन्हें फिर से जोड़ सकते हैं, लेकिन आप उदास नहीं पा सकते हैं। गैर-जेनेरिक कोड लिखने के बिना अंतराल का आधा। – hobbs
सी ++ जेनेरिक सी # जेनेरिक के समान नहीं हैं। सी ++ कंपाइलर संकलन समय पर टेम्पलेट्स का माहिर हैं। सी # जेनेरिक कोड उत्पन्न करता है जो रनटाइम पर विशिष्ट है। एक चीज जो काम नहीं करती है ऑपरेटरों है, कोई सामान्य "एड" या "डिवाइड" ऑपरेटर नहीं है। आप इस कोड को डिज़ाइन द्वारा काम नहीं कर सकते हैं। –