使用静态成员充当模板的命名空间:坏主意?

时间:2012-05-26 13:19:18

标签: c++ c++11

我对设计有疑问。

我有一系列通用函数,它们不属于同一个对象,但是对相同的复杂类型起作用。

我正在考虑将它们作为静态成员函数在模板化类中进行分组,原因有两个:

a)我可以将typedef放入我的“命名空间类”中,以便代码更具可读性 b)用户可以一劳永逸地键入静态类,然后忘记专门化函数。

所以不要打电话:

myfunction< char,int,std::set<double> >(...);

他可以这样做:

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

并写:

MyTheClass::myfunction(...);

你会考虑这个糟糕的设计吗?为什么?

提前致谢!

2 个答案:

答案 0 :(得分:2)

如果使用了类中的模板函数,则只会对其进行实例化。因此,即使您将所有函数都包装在模板类中,它也不会低效,因为只有与特定类型参数集一起使用的函数才会为具有该类型参数集的模板实例化。

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

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

答案 1 :(得分:2)

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