Twitter / digitalghostの妹: int f(int); int f(double) ...
おお!
void f( int ) {} void f( double ) = delete ; int main() { f(0) ; // OK f(1.0) ;// error }
これはすごい。いままでまったく気がつかなかった。よく見たら、deleteは、Deleted definitionsという名前であった。Explicitly-defaulted functionsとは、名前からして明確に異なるのである。素晴らしいことに、deleted定義を指定できる関数に、制限はない。つまり、メンバー関数である必要すらない。
なぜ、いままでメンバー関数にしか使えないという思い込みをしていたのだろう。これは素晴らしい。
ちなみに、こういうこともできる。
void f( int ) {} // f(int)以外すべて削除 template < typename T > void f( T ) = delete ; int main() { f(0) ; // OK f(1.0) ;// error }
No comments:
Post a Comment