c++ - 您在哪里找到有用的模板?

标签 c++ templates metaprogramming generic-programming

在我的工作场所,我们倾向于使用 iostreamstringvectorma​​p 和奇数算法或两个。实际上,我们还没有发现很多情况下模板技术是解决问题的最佳方案。

我在这里寻找的是想法和可选的示例代码,这些代码展示了您如何使用模板技术为您在现实生活中遇到的问题创建新的解决方案。

作为贿赂,期待您的回答获得赞成票。

最佳答案

模板的一般信息:

当您需要使用相同的代码但对不同的数据类型进行操作时,模板很有用,其中类型在编译时是已知的。当你有任何类型的容器对象时也是如此。

一个非常常见的用法是用于几乎所有类型的数据结构。例如:单链表、双链表、树、尝试、哈希表……

另一个非常常见的用法是排序算法。

使用模板的主要优点之一是您可以删除代码重复。代码重复是您在编程时应该避免的最重要的事情之一。

您可以将函数 Max 实现为宏或模板,但模板实现将是类型安全的,因此更好。

现在来看看很酷的东西:

另见 template metaprogramming ,这是一种在编译时而不是在运行时预先评估代码的方法。模板元编程只有不可变的变量,因此它的变量不能改变。因为这个模板元编程可以被看作是一种函数式编程。

查看来自 Wikipedia 的模板元编程示例。它展示了如何使用模板在编译时执行代码。因此在运行时你有一个预先计算好的常数。

template <int N>
struct Factorial 
{
    enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1
}

关于c++ - 您在哪里找到有用的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/237285/

相关文章:

c++ - 自 C++20 以来保持或传递不可寻址的函数

c++ - Windows 风格的 getopt/argp

templates - 另一个文件中的 XSLT 模板

c++ - 模板类型别名可见性编译器不一致

macros - Julia:矢量别名宏

c++ - std::fstream 应该如何工作?

c++ - 在 C++ 中处理 OpenStreetMaps (OSM)

c++ - 如何转换C++11中忽略参数的函数?

haskell - 从 `mappend` 函数到 `Monoid` 实例的函数?

c++ - 用 C++ 编写类型类