2012-05-26 17 views
2

我有一个关于设计的问题。使用静态成员充当模板的命名空间:坏主意?

我有一系列通用函数不属于同一个对象,但行动相同的复杂类型。

我想在一个模板类的静态成员函数将它们分组,原因有二:

一)我可以把类型定义成我的“命名空间中的类”,使代码更易读 二)用户可以一劳永逸地静止静态类,然后忘掉专门的功能。

因此而不是调用:

​​

他可以这样做:

typedef TheClass< char, int, std::set<double> > MyTheClass;

写:

MyTheClass::myfunction(...);

请问你CON面对这个糟糕的设计,为什么?

在此先感谢!

+0

使用一个普通的名称空间并让模板参数扣除做它的工作不起作用? – Mat

+0

是的,不,我仍然必须指定类型时做任务 - 或使用汽车,但我更喜欢有一个有意义的类型名称 – djfm

回答

2

我认为,无论你在哪里应用DRY原则,它通常都是一个好主意,所以如果这样可以避免重复传递相同的模板参数,并且找不到更清洁的替代品,那就去做吧。

2

类中的模板函数只有在使用时才会被实例化。因此,即使您将所有函数包装到模板类中,也不会低效,因为只有与特定类型参数集一起使用的函数才会为具有该类型参数集的模板实例化。

在可读性方面,我个人鄙视typedefs,除非在极少数情况下,因为最终不得不追逐它们来弄清楚你的类型是什么,以及当你有很多这样的模板化类来使用不同类型的参数时无论如何,它会变得令人沮丧和难以阅读。

也许在自己的真实名称空间中包装具有类似用途的函数,当您想要使用它们时可以使用using子句引入该函数,并为用户可以为这些函数单独引入的可选typedefs创建另一个名称空间: )