我应该尽可能地使我的功能一般吗?

Jic*_*hao 4 c++ templates

template<class T>
void swap(T &a, T &b)
{
    T t;

    t = a; 
    a = b;
    b = t;
}
Run Code Online (Sandbox Code Playgroud)

更换

void swap(int &a, int &b)
{
    int t;

    t = a;
    a = b;
    b = t;
}
Run Code Online (Sandbox Code Playgroud)

这是我能提出的最简单的例子,但是应该有许多其他复杂的函数.如果可能的话,我应该创建所有我写的模板化方法吗?

这样做有什么不利之处吗?

谢谢.

Kor*_*icz 11

通用性具有可重用的优点.但是,只有在以下情况下才能写出通用的

  1. 这样做并不需要花费太多时间,而非非泛型
  2. 与非通用解决方案相比,它不会使代码复杂化
  3. 你知道以后会受益

但是,了解您的标准库.您提交的案例已经在STL中std::swap.

此外,请记住,在使用模板进行一般编写时,您可以使用模板特化来优化特殊情况.但是,当它需要性能时,总是要它,而不是你写它.

另请注意,这里有运行时和编译时性能的问题.基于模板的解决方案增加了编译时间.内联解决方案可以但不能减少运行时间.

`原因"过早的优化和通用性是所有邪恶的根源".你可以引用我-_-.


小智 10

只有在您实际重用它时,可重用代码才是可重用的.所以在第一个实例中自然地编写函数.如果稍后你会遇到一个代码可以通过一些调整重用的情况,请回过头来重构它,在重构阶段你应该考虑编写模板函数.