2013-05-31 65 views
0

我正在编写我自己的hash_table实现(只是为了好玩)。我想实施一系列哈希例程,让用户有机会选择一个带有ID的人。为此,我想使用一个能生产合适散列器的工厂。哈希是类模板。是否有可能为产品模板编写工厂,而不使用类型列表等任何类型来指定提供的每种可能类型?我最关心产品注册。产品模板工厂

更一般。我的产品是:

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与id作为template参数。要注册一个id,你需要专门研究traits类,它可以分布式地完成。您可以使用enum或id的整数类型,但这使得难以避免碰撞。

相反,您可以使用标签struct s,它只是充当标识符,如迭代器标签。

这可以在编译时解决。

+0

我从来没有使用过这些。只要阅读一篇关于他们的文章,它看起来非常有趣,它将消除我的代码中对工厂的需求。我会考虑这一点。谢谢 – dagon