12月 102009
class A{
int n;
bool opEquals( A a ){
return n == a.n;
}
}
void main(){
}
これはOKで
struct A{
int n;
bool opEquals( A a ){
return n == a.n;
}
}
void main(){
}
構造体だとだめらしい
newv.d(3): Error: function newv.A.opEquals type signature should be const bool(ref const(A)) not bool(A a)
意味わからん
struct A{
int n;
const bool opEquals( ref const( A ) a ){
return n == a.n;
}
}
void main(){
}
これならOKらしいけど、仕様だったの?
もちろん驚いてないけど、「最近こういうこと無くなったよ」とか書こうと思ってた矢先の出来事でした
思ったより直すの簡単だったからまあいいや
ところで opDispatch とかって
import std.stdio;
struct S{
void opDispatch( string s, T ... )( T n ){
writefln( "S.opDispatch('%s')", s );
writeln( n );
}
}
void main(){
S s;
s.opDispatch!( "hello" )( 7 );
s.foo( 8, 9, [ 10, 11 ] );
s.hoge( 10, "Foo" );
}
OKだけど、で、どうすんだろ
import std.stdio; struct A{ int n; void foo( int i ){ writefln( "A.n = %d", n += i ); } } struct B{ A a; void opDispatch( string s, T ... )( T n ){ mixin( "a." ~ s ~ "( n );" ); } } void main(){ B b; b.foo( 5 ); }構造体の継承に使えるような気もしたが、これは通るけど、返り値とかダメだし
opDot の補助も無理っぽい