Я мог бы сделать это с помощью наследства и ссылочных типов : определить класс для общей общей, имеет B и C -nherit a и проходить последовательность оповедников: void f (std :: span a*nemerit a>. Это сработает, но мне нужно было бы построить последовательность указателей-даже если, например, у меня есть вектор All-B или All-C. Что еще хуже, мои пользователи , скорее всего, будут поручены этой конструкции. Но тогда будет распределение кучи для каждого объекта, и, кроме того, если вы посмотрите на необработанную память, которую использует вектор, вы не увидите B или C, вы будете видеть данные указателя и, возможно, данные Deteter. Итак, если у меня есть, скажем, std :: span где -то - я не могу передать его в f () (напрямую или путем повторного/извлечения его данных () и т. Д.) - Мне придется построить отдельный вход для f ()
. Третий альтернативный Но - объекты этого типа сами не полиморфны, так что код f () не смог бы равномерно обращаться с элементами и должен был бы распаковывать/коллеги в каждом значении, и я бы предпочел избежать этого. То есть я хочу:
- pass std :: span to f ()
- без неопределенного поведения ...
Подробнее здесь: https://stackoverflow.com/questions/796 ... alue-types
Мобильная версия