std::string Gesture::getLabeledPointsString(const std::string delimiter) {
return boost::join(getLabeledPoints(), delimiter);
}
Я не убежден в том, что в этот момент getLabeledPointsString
убедится;)
Это утверждение времени компиляции, которое тип *Doubler
удовлетворяет интерфейсу PropertyLoadSaver
.
Если тип *Doubler
не удовлетворяет интерфейсу, то компиляция завершится с ошибкой, аналогичной:
prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment:
*Doubler does not implement PropertyLoadSaver (missing Save method)
. Вот как это работает. Код var _ PropertyLoadSaver
объявляет неназванную переменную типа PropertyLoadSaver
. Выражение (*Doubler)(nil)
оценивается значением типа *Doubler
. *Doubler
может быть назначена только переменной типа ProperytLoadSaver
, если *Doubler
реализует интерфейс PropertyLoadSaver
.
Используется пустой идентификатор _
, потому что переменная не должна быть упоминается в другом месте в пакете. Тот же результат может быть достигнут с помощью непустого идентификатора:
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)
(*Doubler)(nil)
приятно. Я тоже не знаком с этим. – The user with no hat 3 July 2016 в 06:51