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