2

我有一个关于设计的问题。

我有一系列不属于同一个对象但作用于同一个复杂类型的泛型函数。

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

a) 我可以将 typedefs 放入我的“命名空间类”中,这样​​代码更具可读性 b) 用户可以一劳永逸地对静态类进行 typedef,然后忘记专门化功能。

所以不要打电话:

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

他可以这样做:

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

和写 :

MyTheClass::myfunction(...);

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

提前致谢 !

4

2 回答 2

2

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

在可读性方面,我个人鄙视 typedef,除非在极少数情况下,因为您最终不得不追查它们以弄清楚您的类型是什么,并且当您有很多它们用于模板化类采用不同的类型参数时,它可以得到无论如何,令人沮丧且难以阅读。

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

于 2012-05-26T13:34:04.470 回答
2

我认为在任何可以应用 DRY 原则的地方通常都是一个好主意,所以如果这可以避免重复传递相同的模板参数,并且找不到更简洁的替代方案,那么就去做吧。

于 2012-05-26T13:45:50.470 回答