Не могли бы вы немного подробнее рассказать о сценарии использования?
AFAICT, в приведенном вами примере значение будет где-то преобразовано в текст, чтобы его можно было отобразить на экране.Да?
Итак, я могу понять, как передать указатель или ссылку на текст, который будет отображаться в метке.Затем программа «на стороне пользователя» может изменить текст после создания метки.Но это оставляет неопределенным то, как метка знает, что она должна перерисовать текст.Так что это не идеально.
Я также могу понять передачу указателя функции на метку.Функция будет возвращать (указатель на) фрагмент текста, который должен быть визуализирован.Это полезно, потому что эта функция выполняется, чтобы определить, изменилось ли значение, и соответствующим образом преобразовать значение в текст.
Опять не определено, как метка знает, что ей нужно вызвать функцию.Но если предположить, что попытка метки может решить эту проблему, это точно та же проблема, поэтому я предполагаю, что она решена.
Это, кажется, единственный существенный случай.Все остальное, кажется, выполнимо, используя это.Таким образом, метка может быть основана на функции, которая скрывает тип, а не тип данных значения, что не имеет значения, так как оно все равно должно быть преобразовано в текст.
Еще одним преимуществом этого является функцияможет убедиться, что формат выглядит правильно.Мне нравятся такие вещи, как время кадра, для рендеринга в виде поля фиксированной ширины, и некрасиво, если оно уменьшается и расширяется.
Обобщением этого является шаблонный класс, который имеет специфичные для типа средства доступа для программы на стороне пользователя, чтобыустановите и обновите значение, а также фиксированную функцию, которая возвращает строку, которая будет отображена.
Сводка: шаблон для функции, которая возвращает текстовую строку, или шаблон для класса, который имеет четко определенную функцию, которая возвращаеттекстовая строка.
Редактировать (в результате пиццы) Это может быть полезным способом обдумать это.
Элегантным решением проблем смэ является «интерфейс» (например, Java, Golang или...).
В этом случае интерфейсу требуется только одна функция без параметров, которая возвращает (в моем примере) текстовую строку.Это интерфейс, который передается на этикетку.
Интерфейс должен встраивать значение, ссылку или указатель на объект (экземпляр класса или POD), который реализует значение, и этот класс или POD должен иметь способ дать текстовую строку.
Класс или POD, который реализует значение, скрыт от метки интерфейсом.