我想在一处了解这三个概念的精确而简洁的定义。答案的好坏应该取决于以下两点。
- 展示一个简单的代码片段来展示这个概念/技术的用途和用途。
- 足够简单易懂,以便没有接触过该领域的程序员也能掌握。
注意:
可能有很多正确答案,因为每个概念都有许多不同的方面。 如果有很多好的答案,我最终会将问题转化为 CW 并汇总答案。
-- 发布接受编辑--
Boost 有一个很好的 article关于泛型编程概念
最佳答案
概念 是对一种类型的一组要求。例如,您可以有一个名为“RandomAccessible”的概念,它要求在 O(1) 时间内实现 operator[](int)
的类型。
随着概念从即将到来的 C++ 标准中删除,它们仅作为文档无形地存在于 C++ 中。例如,您可以阅读 SGI's description of the Container concept .
当一个类型满足一个概念的所有要求时,您称它为该概念的模型。例如,std::vector
是 Container 概念的模型(或者,等效地,std::vector
“models” Container)。
最后,策略 是一个行为单元,它可以与其他行为单元组合以构建复杂的类。例如,假设您想构建两个类:一个固定大小的数组和一个可动态调整大小的数组。这两个类都有很多共享功能,但它们的存储机制和某些功能不同(例如,您不能在固定大小的数组上调用 push_back
)。
template <class T, class StoragePolicy>
class array : public StoragePolicy
{
public:
T& operator[](int i) { return data[i]; }
};
template <class T, int N>
class fixed_storage
{
T data[N];
};
template <class T>
class dynamic_storage
{
T* data;
public:
void push_back(const T& value)
{
// Code for dynamic array insertion
}
};
用法如下:
int main()
{
array<int, fixed_storage<int, 10> > fixed_array;
array<int, dynamic_storage<int> > dynamic_array;
dynamic_array.push_back(1);
fixed_array[9] = dynamic_array[0];
}
显然这是一个非常粗略和不完整的例子,但我希望它能阐明政策背后的概念。
请注意,在示例中,我们可以说 fixed_storage
和 dynamic_storage
是 StoragePolicy
概念的“模型”。当然,我们需要正式定义 StoragePolicy
概念对其模型的要求。在这种情况下,只需定义一个可索引的 data
成员变量。
关于c++ - 在通用编程/TMP 世界中,模型/策略和 "concept"究竟是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2213664/