c++ - 我应该让我的功能尽可能通用吗?

标签 c++ templates

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

    t = a; 
    a = b;
    b = t;
}

替换

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

    t = a;
    a = b;
    b = t;
}

这是我能想出的最简单的例子,但应该还有很多其他复杂的功能。我是否应该尽可能将我编写的所有方法都模板化?

这样做有什么缺点吗?

谢谢。

最佳答案

通用性具有可重用的优点。然而,写通用的东西,只有在:

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

但是,了解您的标准库。您提供的案例已经在 STL 中作为 std::swap

此外,请记住,在使用模板进行通用编写时,您可以使用模板特化来优化特殊情况。但是,请始终在性能需要时,而不是像您编写的那样。

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

`原因“过早的优化和通用性是万恶之源”。你可以引用我的话 -_-。

关于c++ - 我应该让我的功能尽可能通用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1995290/

相关文章:

c++ - break 在按 enter 作为输入 c++ 时不起作用

c++ - 传递标准 vector 作为引用 : no matching function to call

c++ - c++ 哈希函数对密码来说是否相当安全?

c++ - 编译/调试 LZMA

c++ - 模板参数的格式规范

c++ - 引用传递以错误结束

c++ - 这是访问类数据成员的正确方法吗?

c++ - 获取 C++ 模板参数包的总大小(以字节为单位)

c++ - 为什么使用局部结构作为 STL 函数参数的代码不能在 g++ 中编译?

javascript - 模板与 DOM 创建 - 高度动态的界面