C++ में मैं क्या कर सकते हैं निम्नलिखित:सी ++ टेम्पलेट्स के समान स्कैला में जेनेरिक रिटर्न प्रकारों को कोड करना संभव है?
template<typename T, typename V>
struct{
void operator()(T _1, V _2){
_2.foo(_1);
}
};
मुझे मनमाने ढंग से किसी भी वस्तु जो कुछ विधि "foo" कहा जाता है कि के अग्रिम या तो तर्क प्रकार में निर्दिष्ट किए बिना कुछ प्रकार "टी" लेता है उपयोग करने के लिए तय कर सकते हैं जो
"foo" फ़ंक्शन और न ही कार्य का रिटर्न प्रकार।
जब मैं स्काला को देखो, Function1 की तरह लक्षण देखते हैं, और
def foo[T<:{def foo():Unit}](arg:T) = //something
def bar(x:{def foo():Unit}) = //something
def baz[T,V<:Function1[T,_]](x:T, y:V) = y(x)
की तरह समारोह परिभाषा के साथ चारों ओर खेल रहा हूँ मैं अपने आप को देखो और लगता है कि कारण है कि मैं एक ही बात नहीं कर सकते? "बाज़" क्यों कोई लौटाता है? क्या यह संकलन समय पर वास्तविक रिटर्न प्रकार को कम नहीं कर सकता है? अगर मैं इसका उपयोग भी नहीं कर सकता तो मुझे "foo" का रिटर्न प्रकार क्यों घोषित करना होगा?
मैं
def biff[T,V:{def foo(x:T):Unit}] = //something
या
def boff[T<:{def foo(x:Double):_}](y:T) = y.foo _
आप यह कर सकते हैं ऐसा करने में सक्षम होना चाहते हैं और मैं बस कुछ याद आ रही है? या यदि नहीं, तो क्यों नहीं?
मैं 'biff' उदाहरण पर स्पष्ट नहीं हूं। क्या कोई गुम तर्क है? –
@Aaron Novstrup कोई गुम तर्क नहीं। मुझे एक त्रुटि मिल रही है जब मैं इसे इस तरह बताता हूं। कहते हैं कि मैं "वी" को परिभाषित नहीं कर सकता हूं कि यह "टी" पर निर्भर करता है। – wheaties