当前位置: 首页 > news >正文

美丽乡村网站建设策划书怎样推广自己的产品

美丽乡村网站建设策划书,怎样推广自己的产品,网络培训资格证书如何获得,24小时最新在线视频免费观看目录 1. 特征技术概述(Traits) 1.1 特征技术的目的 1.2 特征技术实现方式 1.3 特征技术常见用例 2. 应用举例 3. 创建自己的特征类 3. C 特征对模板逾编程的贡献 3.1 函数模板逾编程 3.2 类模板逾编程 1. 特征技术概述(Traits) C 特征技术是一种强大的机…目录 1.   特征技术概述(Traits) 1.1  特征技术的目的 1.2  特征技术实现方式 1.3  特征技术常见用例 2.   应用举例 3.   创建自己的特征类 3.   C 特征对模板逾编程的贡献 3.1  函数模板逾编程 3.2  类模板逾编程 1.   特征技术概述(Traits) C 特征技术是一种强大的机制它允许你在编译时获取类型的信息。它使你能够编写能够适应不同类型的泛型代码而无需运行时开销。 您可以将特征视为具有多种结果的一个类型函数或一组类型函数。标准库提供了allocator_traitschar_traitsiterator_traitsregex_traitspointer_traits。此外它还提供了 time_traits和 type_traits。 关键概念为: 类型特征(Type Traits)——提供关于类型的属性。 策略(Policy)——将接口定义为对其他类的服务的类或类模板。 模板逾编程(Template Metaprogramming)——使用模板在编译时执行计算(以避免运行时计算提升运行时性能)。 1.1  特征技术的目的 以下是关键方面的细分 (1) 类型自省 特征技术提供了一种(编译时)查询类型属性的方法例如某个类型是整数、指针还是类。 (2) 编译时自定义 基于从特征获取的信息您可以在编译时自定义代码的行为。这允许针对不同类型的代码路径进行优化。 (3) 泛型编程 特征对于编写可处理多种类型的泛型算法和数据结构至关重要。 (4)  扩展功能 特征技术可以通过提供类型的信息来扩展和调整现有代码。 1.2  特征技术实现方式 (1) 模板类 特征通常以模板类的形式实现。它们将类型作为模板参数。 (2) 静态成员 特征类通常包含静态成员常量或成员类型用于提供有关类型参数的信息。 (3) 特化 您可以针对特定类型特化特征类以提供不同的行为或信息。 (4) 编译时估算 特征在编译时进行求值因此没有运行时开销。 1.3  特征技术常见用例 (1)  类型检查 诸如 std::is_integralstd::is_pointer 和 std::is_class 之类的特征允许您检查类型的属性。 (2) 类型转换 诸如 std::remove_conststd::add_pointer 和 std::remove_reference 之类的特征允许您修改类型。 (3)  算法优化 通过使用特征您可以编写能够针对特定类型使用优化的泛型实现的算法即针对特定类型的模板特化。 (4)  库开发 特征在 C 标准库中被广泛使用以提供泛型功能。 2.   应用举例 不同的代码片段结构基本相同但在细节上存在差异这种情况并不少见。理想情况下我们能够重用这些结构并剔除这些差异。在 C 语言中这可以通过使用函数指针来实现例如 C 标准库中的 qsort 函数或者在 C 中使用虚函数。遗憾的是这与编译时已知的运行时情况不同并且会产生运行时开销。 C 引入了泛型编程使用模板消除了运行时绑定的需求但乍一看这仍然像是一种妥协毕竟相同的算法并非适用于所有数据结构。对链表进行排序与​​对数组进行排序不同。排序数据的搜索速度比未排序数据快得多。 C 特征是模板编程的一个特例通常只关注特定类型的特性例如静态属性和静态函数。它是 C 模板编程最基本的构建块之一。   C 和 C 程序员都应该熟悉 limits.h 和 float.h它们用于确定整数和浮点类型的各种属性。 大多数 C 程序员都熟悉 std::numeric_limits 乍一看它只是提供了相同的服务只是实现方式不同。通过仔细研究numeric_limits我们发现了 trait 的第一个优点一致的接口。 使用 float.h 和 limits.h 时你必须记住类型前缀和特征例如 DBL_MAX 包含 double 数据类型的“最大值”特征。通过使用像numeric_limits这样的特征类类型会成为名称的一部分因此 double 的最大值将变为numeric_limitsdouble::max() 更重要的是你不需要知道需要使用哪种类型。例如以这个简单的模板函数(改编自 [ Veldhuizen ])为例它返回数组中的最大值 template class T T findMax(const T const* data, const size_t const numItems) { // Obtain the minimum value for type T T largest std::numeric_limits T ::min(); for (unsigned int i 0; i numItems; i) if (data[i] largest) largest data[i]; return largest; } 注意numeric_limits的用法。正如您所见与C风格的limits.h习语一样您必须知道类型而使用C 的traits习语只有编译器需要知道类型。不仅如此numeric_limits与大多数traits一样只需通过创建模板的特化版本即可扩展为包含您自己的自定义类型(例如定点或任意精度算术类)。 我们不讨论numeric_limits它只是一个trait实际应用的示例我们介绍如何创建您自己的traits类。 3.   创建自己的特征类 C 特征可用于统一不同类型的低级函数接口从而简化高级模板编程。 例如如果我们想为不同的数值类型(包括 int32_tint64_tfloat 和 double)创建函数例如 greater_than_half_maximum并使用该类型的最大值那么如果不使用 特征技术就很难充分利用模板编程的优势。 template typename T bool greater_than_half_maximum(T value) { return false; } template bool greater_than_half_maximumint32_t(int32_t value) { // 2^31 - 1 if (value 2147483647 / 2) { return true; } else { return false; } } template bool greater_than_half_maximumint64_t(int64_t value) { // 2^63 - 1 if (value 9223372036854775807 / 2) { return true; } else { return false; } } template bool greater_than_half_maximumfloat(float value) { // FLT_MAX defined in cfloat if (value FLT_MAX / 2) { return true; } else { return false; } } template bool greater_than_half_maximumdouble(double value) { // DBL_MAX defined in cfloat if (value DBL_MAX / 2) { return true; } else { return false; } } // Even more specializations for different types. // ... 从上面的例子我们可以看出即使我们想使用模板编程而不使用特征不同类型的特化实现也是不可避免的。 std::numeric_limits 是 C 标准库中的一个类型特征它定义了不同内置类型的最大值。通过使用 std::numeric_limitsT::max()我们无需针对特定用例为不同类型创建特化。 #include limits template typename T bool greater_than_half_maximum(T value) { if (value std::numeric_limitsT::max() / 2) { return true; } else { return false; } } 对于自定义数值类型例如 NVIDIA __half我们可以为 std::numeric_limits 创建特化而不是为 greater_than_half_maximum 创建特化。 namespace std { template class numeric_limits__half { public: constexpr static __half max() { constexpr uint16_t const half_max_bits{ 0x7BFF }; __half const half_max{ *reinterpret_cast__half const*(half_max_bits) }; return half_max; }; }; } // namespace std 当然有人可能会说对于不同的类型我们必须创建不同的类型特征这同样需要大量的工作。然而由于低级类型特征通常比高级特化更具可复用性因此相比于高级模板特化在创建低级类型特征上投入精力更有价值。此外由于高级模板特化通常比类型特征需要更多行实现因此创建低级类型特征所需的工作量比高级模板特化要少。 3.   C 特征对模板逾编程的贡献 C 类型特征对于模板逾编程至关重要。我们将了解它如何用于函数模板逾编程和类模板逾编程。 3.1  函数模板逾编程 当类型特征与 std::enable_if 一起使用时我们可以针对不同类型特化函数实现细节正如我之前的博客文章“使用 Enable If 进行 C 模板特化”中所述。 3.2  类模板逾编程 当类型特征与 std::conditional_t 一起使用时我们可以针对具有不同类型的成员变量且无法简单模板化的类特化其实现细节。 例如C random 库有两个用于生成均匀分布随机数的函数包括用于生成整数值的std::uniform_int_distribution和用于生成实数值的 std::uniform_real_distribution。 以下实现使用类型特征 std::is_integralT::value 统一了这两个随机数生成函数 std::uniform_int_distribution 和 std::uniform_real_distribution。 #include iostream #include iterator #include random #include vector template typename T class UniformDist { public: UniformDist(T a, T b) : m_min{ a }, m_max{ b }, m_uniform_dist{ a, b } {} T operator()(std::mt19937 random_engine) { return m_uniform_dist(random_engine); } private: T const m_min; T const m_max; using dist_t std::conditional_tstd::is_integralT::value, std::uniform_int_distributionT, std::uniform_real_distributionT; dist_t m_uniform_dist; }; template typename T std::vectorT create_random_vector(size_t n, T a, T b, std::mt19937 random_engine) { UniformDistT uniform_dist{ a, b }; std::vectorT vec(n, 0.0); for (size_t i{ 0 }; i n; i) { vec[i] uniform_dist(random_engine); } return vec; } int main() { size_t const n{ 8 }; unsigned int const seed{ 0U }; std::mt19937 random_engine{ seed }; std::vectordouble const random_vector_double{ create_random_vector(n, -16.0, 16.0, random_engine) }; std::cout Random Vector of Doubles: std::endl; std::copy(random_vector_double.begin(), random_vector_double.end(), std::ostream_iteratordouble(std::cout, )); std::cout std::endl; std::vectorint const random_vector_int{ create_random_vector(n, -16, 16, random_engine) }; std::cout Random Vector of Integers: std::endl; std::copy(random_vector_int.begin(), random_vector_int.end(), std::ostream_iteratorint(std::cout, )); std::cout std::endl; }
http://www.sczhlp.com/news/174098/

相关文章:

  • 深圳好看的网站建设哪家公司好建设银行门户网站
  • 上海做网站公司推荐网站建设公司企业文化
  • 青岛市建设局网站静态网站特点
  • 网页设计难还是网站建设南九江做网站哪家好
  • 做企业网站找谁wordpress跳转链接
  • 黑龙省建设厅网站怎样做寻亲网站志愿者
  • 湖南涟钢建设有限公司网站网站颜色字体颜色
  • IEEE754浮点格式与解析
  • 国庆 Day3 强基数学
  • 婴儿衣服做的网站好网站备案各种问题汇总
  • 网站开发中遇到的主要问题品牌代理加盟网
  • 福田做网站中国互联网协会官网平台
  • 从零开始建网站福州搜索优化技术
  • 机械制造设备类企业网站织梦模板ui设计难吗
  • 博客发布 网站模版wordpress创建专题
  • 网站建设项目有哪些关键词优化排名易下拉霸屏
  • 手机怎么创网站免费麻涌网站建设公司
  • python做网站稳定吗汕头市网络优化推广平台
  • 一元云够网站建设网页版微信可以转账吗
  • 金融网站怎么做的asp.net mvc做网站难吗
  • 巨鹿网站建设网络公司移动网络服务商
  • 在dw里如何做网站建设个人博客网站制作
  • 深圳营销型网站联系方式网站开发人员属于什么
  • 民治网站建设yihe kj怎么找人做动漫视频网站
  • 网站开发+演讲网站服务器中如何做重定向
  • 奢侈品 网站建设方案seo搜索优化推广
  • 怎么做找券网站花都区pc端网站建设
  • 手机网站程序代发新闻稿的网站
  • php网站建设案例教程视频教程怎样做淘宝推广网站
  • 无锡企业网站佛山网站搭建