Я думаю, что проблема в том, что компилятор не имеет никакого способа узнать, какой тип данных должен содержаться в вашем классе type
.Боюсь, auto
здесь не сработает, потому что он предназначен для случаев, когда компилятор может определить фактический тип объекта из контекста, а вы его не предоставили.(Мы, читатели, можем посмотреть в другом месте в классе и найти type = new TYPE();
и сделать из этого вывод, но, насколько я знаю, auto
может смотреть только на оператор, инициализирующий его объект.)
Как действовать, затем?Если вы не знаете, какой тип переменной использовать, вы можете написать шаблон или, если тип является одним из небольшого набора возможностей, вы можете использовать std::variant
.
Что касается того, чтобы сделать его доступным в качестве глобальной переменной: я не думаю, что вам нужно делать что-то особенное, помимо того, что вы обычно делаете для глобальной: объявите это в заголовочном файле, определите его висходный файл, и включите заголовок, где это необходимо.Обычные соображения применяются.Подумайте, действительно ли это должно быть глобальным.Поместите его в соответствующее пространство имен, чтобы не загрязнять глобальное пространство имен.И так далее.