Has*_*yed 6 c++ templates components metaprogramming generic-programming
我想在一个地方知道这三个概念的确切而简洁的定义.答案的质量应取决于以下两点.
注意:
可能有许多正确的答案,因为每个概念都有许多不同的方面.如果有很多好的答案,我最终会将问题转化为CW并汇总答案.
- 发布接受编辑 -
一个概念是一组对类型的要求.例如,您可以使用一个名为"RandomAccessible"的概念,该概念将需求放在它operator[](int)
在O(1)时间内实现的类型上.
随着概念从即将推出的C++标准中删除,它们仅作为文档在C++中无形地存在.例如,您可以阅读SGI对Container概念的描述.
当类型满足概念的所有要求时,您将其称为该概念的模型.例如,std::vector
是Container概念的模型(或者,等效地,std::vector
"模型"容器).
最后,策略是一个行为单元,可以与其他行为单元结合起来构建复杂的类.例如,假设您要构建两个类:固定大小的数组和可动态调整大小的数组.这两个类都有很多共享功能,但只是它们的存储机制和它们的一些功能不同(例如,你不能调用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
}
};
Run Code Online (Sandbox Code Playgroud)
用法如下:
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];
}
Run Code Online (Sandbox Code Playgroud)
显然,这是一个非常粗略和不完整的例子,但我希望它阐明了政策背后的概念.
请注意,在这个例子中,我们可以说,fixed_storage
和dynamic_storage
是的"模型" StoragePolicy
的概念.当然,我们需要正式定义StoragePolicy
其模型所需的概念.在这种情况下,它只是定义一个可索引的data
成员变量.
归档时间: |
|
查看次数: |
229 次 |
最近记录: |