Real opIndex(size_t row, size_t col = 0) const pure nothrow {
assert(col + row * Col < Row * Col, "index out of bounds.");
return _data[col + row * Col];
}
Dziś to stwierdzenie nie powiodło się i chciałem zobaczyć rzeczywiste wartości row
i col
. Unfortunetly, assert
nie jest jak writeln
lub writefln
, więc nie mogę zrobić coś takiego:Jak wydrukować więcej, gdy asercja się nie powiedzie?
assert(col + row * Col < Row * Col, "index out of bounds. row: %d col: %d", row, col);
Próbowałem nawet to:
assert(col + row * Col < Row * Col, "index out of bounds" ~ to!string(row)~ " " ~ to!string(col));
Ale nie mogę zadzwonić to
ponieważ opIndex
jest czysta . Mogłem tymczasowo usunąć pure
z opIndex
, ale to wyzwala długi łańcuch cofnięć, ponieważ inne czyste metody wywołują opIndex
. Niemożliwość wywołania to
eliminuje również możliwość utworzenia własnej funkcji przekazywania do assert
.
Co jeszcze można spróbować? Chcę wydrukować takie wartości, gdy asercja się nie powiedzie.