有哪些語言可以做到:List<T> 實現介面 I(或繼承某個類)當且僅當 T 實現 I?


instance (Show a) =&> Show [a] where

這樣?


C++,使用的時候直接寫List&,不用管第二個參數。

template&
struct List
{
};

template&
struct List&&>::type&> : IDisposable
{
};


Python,可以用abc(打死)

issubclass和isinstance可以hook的語言……


Scala

implicit def toIL[T, I](li: List[T &<: I]) = new I {...}


C++ 模板的另一個寫法:

#include&

struct IDisposable
{
virtual void Dispose() = 0;
virtual ~IDisposable() { }
};
struct SomeIDisposable : virtual IDisposable
{
void Dispose() { }
};
template &&>
struct ConditionalImpl
{
};
template &
struct ConditionalImpl& : virtual IDisposable
{
void Dispose() { }
};
int main()
{
ConditionalImpl& a;
// a.Dispose(); // fails
ConditionalImpl& b;
b.Dispose(); // succeeds
return 0;
}

更安全的則是分別實現 true、false 的情況,然後 using 防止有人提供第二個參數。


JAVA List& 表示T為上界


c#

interface IShit {

}

class Fuck& where T : IShit {

}


java

public class A{

}

public class List& extends A {

}


推薦閱讀:

關於MSIL中的Nop的問題?
xamarin 怎麼發音?
快速開發桌面程序用什麼技術合適?
async/await非同步模型是否優於stackful coroutine模型?
學習 ASP.NET MVC 框架有什麼好的視頻教程或書籍?

TAG:編程語言 | Java | C | C# | Rust編程語言 |