Приведенный выше код не будет работать, поскольку всякий раз, когда вы используете шаблон C ++, вы должны указать его аргументы.Если вы хотите сохранить Foo неизвестного типа, вы можете сделать это путем параметризации Bar по какому-либо типу (например, сделать его шаблоном с аргументом типа T), а затем с помощью Bar сохранить Foo.Это отличается от других языков, таких как Java, где код, подобный тому, что вы изложили выше, является законным, потому что шаблоны работают по-разному в C ++.В частности, генетика в стиле Java просто компилируется в одно конкретное представление, а затем использует проверки во время выполнения, чтобы убедиться, что они используются правильно.Все экземпляры шаблонов C ++ в конечном итоге компилируются в отдельный код, и поэтому компилятор должен иметь возможность выводить во время компиляции, что такое типы аргументов (поэтому он знает, какой код генерировать).