Шаблоны C ++: Тип передачи, а не экземпляр?

Шаблоны могут не быть здесь ответом, но я попробовал наследование, и это не сработало, так что вот где я нахожусь.

Проблема:

У меня есть абстрактный базовый класс, в котором хранятся все мои «рабочие» функции. Затем у меня будет куча других классов, которые расширяют этот базовый класс и, по сути, просто заполняют детали данных для передачи их «рабочим» функциям, а также переопределяют пару функций базовых классов.

Одна из основных частей данных, которая будет изменяться в каждом производном классе, - это структура.

Итак, мой первоначальный план атаки заключался в том, чтобы определить BaseStruct, и абстрактный базовый класс просто выполнял всю свою работу с этой базовой структурой. Если производные классы использовали другую структуру, расширяющую эту базовую структуру, это нормально.

Проблема, с которой я столкнулся, заключается в том, что я не мог получить размер структуры, поскольку в рабочей функции тип структуры, с которой она работала, является BaseStruct, а не производным типом.

Итак, теперь я смотрю на шаблоны.

По сути, я хочу иметь базовую функцию, которая делает это:

template<typename StructType>
void AbstractMaterial::CreateVertexBuffer() {

    StructType* array = new StructType[numVertices];

    size_t si = sizeof(StructType) * numVertices;

    ...
}

Конечно, без фактической передачи чего-либо в эту функцию она не работает.Я бы предпочел не создавать экземпляр StructType для передачи только для получения информации о типе, но не похоже, что есть какой-либо другой способ?

По сути, я хочу, чтобы производные классы кто-то указывал StructType для использования, когда эта функция называется.

Спасибо!

0
задан Jon 1 December 2011 в 03:30
поделиться