2013-05-31 2 views
0

Я пишу свою собственную реализацию hash_table (просто для удовольствия). Я хотел бы реализовать серию хэширующих подпрограмм и дать пользователю возможность выбрать один с идентификатором. Для этого я хотел бы использовать фабрику, которая создавала бы соответствующий хешер. Хеширование - это шаблоны классов. Можно ли написать фабрику для шаблонов продуктов, не используя ничего подобного спискам типов, чтобы указать все возможные типы? Меня больше всего беспокоит регистрация продукта.завод для шаблонов продуктов

Больше общего. Мои продукты:

template <typename X> 
class i_prod 
{ 
}; 

template <typename X> 
class c_prod_a : public i_prod { 

}; 

template <typename X> 
class c_prod_b : public i_prod { 

}; 

Завод также является шаблоном класса. Но как разобраться в процессе регистрации?

+0

Вы используете какой-то действительно странный жаргон, например «шаблоны классов» (которые обычно относятся к объявлению классов шаблонов, а не к экземплярам) и «шаблонам продуктов» (я понятия не имею, что это такое). Кроме того, вы ничего не сказали о том, как шаблоны продуктов вписываются в эту историю. – Wug

+0

Если вы не хотите переключать функцию хэширования * во время выполнения *, завод не подходит. –

ответ

0

Да, используйте черты classtemplate с идентификатором как template аргумент. Чтобы зарегистрировать идентификатор, вы специализируетесь на классе признаков, который может выполняться дистрибутивно. Вы можете использовать enum или интегральный тип для идентификатора, но это затрудняет столкновения.

Вместо этого вы можете использовать тег struct s, которые просто действуют как идентификаторы, такие как теги итератора.

Это может быть разрешено при сборке зубца.

+0

Я никогда не использовал их. Просто прочитайте статью о них, и это кажется очень интересным, и это устранит необходимость в фабрике в моем коде. Я подумаю об этом. благодаря – dagon

Смежные вопросы