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

桐乡做网站的公司博客是哪个软件

桐乡做网站的公司,博客是哪个软件,中国舆情观察网,龙岗营销网站建设目录 一、书中第一题 二、书中第三题 三、书中第五题 四、书中第六题 五、书中第七题 六、书中十一题 七、书中十二题 八、 书中十三题 总结 一、书中第一题 #include <iostream>template <typename T, size_t N> struct NSVarTypeDict {static void Cre…

目录

一、书中第一题

二、书中第三题

三、书中第五题

四、书中第六题

五、书中第七题

六、书中十一题

七、书中十二题

八、 书中十三题

总结


一、书中第一题

#include <iostream>template <typename T, size_t N>
struct NSVarTypeDict {static void Create_() {CreateHelper<N, T>();}private:template <size_t M, typename U>struct CreateHelper {static void Apply() {// 构造元素的逻辑std::cout << "Constructing element at index " << M << std::endl;CreateHelper<M - 1, U>::Apply();CreateHelper<M - 1, U>::Apply();}};template <typename U>struct CreateHelper<0, U> {static void Apply() {// 基础情况:当索引为0时停止递归}};
};int main() {NSVarTypeDict<int, 8>::Create_();return 0;
}

二、书中第三题

#include <iostream>
#include <type_traits>template <size_t N, size_t M, typename T1, typename T2>
struct NSVarTypeDict {using NewTupleType_ = std::conditional_t<N == M, T1, T2>;
};int main() {struct Type1 {int value;};struct Type2 {double value;};typename NSVarTypeDict<3, 4, Type1, Type2>::NewTupleType_ var1;  // 选择Type2typename NSVarTypeDict<5, 5, Type1, Type2>::NewTupleType_ var2;  // 选择Type1return 0;
}
  • 代码结构更清晰:通过使用std::conditional_t将特化1和特化2合并成一个表达式,避免了重复的代码逻辑和声明。
  • 可维护性提高:合并后的代码更加简洁,易于阅读和理解。

在使用std::conditional_t进行合并后,简化的代码更易于理解和维护,并且避免了重复代码的问题,因此整体上更具优势。

三、书中第五题

#include <iostream>class VarTypeDict {
public:template<typename T>void Set(T&& value) && {// 只能用于右值的Set函数实现std::cout << "Setting value for rvalue: " << value << std::endl;}template<typename T>void Set(T& value) & {// 能用于左值的Set函数实现std::cout << "Setting value for lvalue: " << value << std::endl;}
};int main() {VarTypeDict::Values values;int x = 10;values.Set(x);  // 调用能用于左值的Set函数values.Set(20); // 调用只能用于右值的Set函数return 0;
}

优势和劣势:

优势:

  • 能用于左值的函数可以接受左值类型的参数,提供更灵活的使用方式。
  • 通过重载的方式,程序可以根据传入值的类型来选择合适的函数重载,提高了程序的通用性和适用性。

劣势:

  • 在某些情况下,程序员需要知道传入的值是左值还是右值,否则会导致调用不符合预期的函数。

总体上,能用于左值的函数相比只能用于右值的函数更加灵活,可以接受更多种类的参数,但需要谨慎使用以避免潜在的问题。

四、书中第六题

将构造函数的访问权限从public修改为private或protected是一种有效的封装手段,可以限制其它类对构造函数的直接访问,从而更好地控制类的实例化。

理由:

  1. 控制类的实例化:通过将构造函数的访问权限设为private或protected,可以防止该类被直接实例化,从而强制使用特定的接口或方法来获取该类的实例。
  2. 封装实现细节:将构造函数的访问权限限制在类内部,有助于隐藏实现细节,提高类的封装性和安全性。
  3. 限制子类的实例化:将构造函数的访问权限设为protected可以使子类能够调用构造函数,但限制外部代码直接实例化子类。

接下来,让我们尝试将Values的构造函数访问权限从public修改为private,然后编译检查是否符合预期。

class VarTypeDict {
public:class Values {private: // 修改构造函数的访问权限为privateValues() {}friend class VarTypeDict; // 允许VarTypeDict类访问构造函数public:template<typename T>void Set(T&& value) && {std::cout << "Setting value for rvalue: " << value << std::endl;}template<typename T>void Set(T& value) & {std::cout << "Setting value for lvalue: " << value << std::endl;}};
};

根据上述代码修改,我们将Values的构造函数的访问权限修改为private,并使用friend关键字允许VarTypeDict类访问构造函数。

在实际编译时,会发现尝试在外部进行Values类的实例化会导致编译错误,而在VarTypeDict类中可以正常调用构造函数来创建Values的实例,符合我们的预期。

这种修改符合我们的预期,成功限制了外部代码对Values类的直接实例化,增强了类的封装性和安全性。

五、书中第七题

#include <iostream>
#include <tuple>class VarTypeDict {
public:class Values {private:std::tuple<int, double, std::string> data; // 使用std::tuple替换指针数组public:template<typename T>void Set(T&& value) && {std::get<T>(data) = value;  // 使用std::get获取元素}template<typename T>T Get() {return std::get<T>(data);  // 使用std::get获取元素}};
};

示例中,使用std::tuple替换了指针数组,这样就不需要显式进行内存分配和释放。通过std::get函数,我们可以在不了解具体元素类型的情况下,访问和操作特定类型的元素。

新版本的复杂度分析:

  1. 时间复杂度:使用std::tuple并不会增加操作的时间复杂度,因为std::tuple内部通常是通过继承和模板特化来实现的,因此元素访问的操作也是常数时间复杂度。
  2. 空间复杂度:使用std::tuple可能会略微增加一些内存消耗,因为std::tuple通常会引入一些辅助结构来实现元素访问的功能。

总体而言,通过使用std::tuple替换指针数组,新版本的VarTypeDict复杂度并未明显增加,并且更加安全和易用,因为不再需要显式操作内存分配与释放,同时使用std::tuple提供了更好的类型安全性和代码可读性。

六、书中十一题

#include <iostream>// 定义策略类模板
template <typename T>
class Policy {
public:void DoSomething() {std::cout << "Doing something with type " << typeid(T).name() << std::endl;}
};// 定义宏来简化策略对象的定义
#define POLICY_POLICY(PolicyType, ValueType) Policy<PolicyType<ValueType>>int main() {// 构造模板策略对象POLICY_POLICY(std::vector, int) policyObject;// 使用策略对象policyObject.DoSomething();return 0;
}

七、书中十二题

#include <iostream>
#include <type_traits>
#include <utility>class NamedParameters {
public:class Values {private:int value;public:Values(int val) : value(val) {}template<typename T>T Get() const {return T(value); // 复制构造返回值}template<typename T>typename std::remove_const<T>::type&& Get() && {return std::move(value); // 返回右值引用,使用移动语义}};
};int main() {NamedParameters::Values values(123);// 使用左值引用调用Get函数int copyValue = values.Get<int>();std::cout << "Copy Value: " << copyValue << std::endl;// 使用右值引用调用Get函数int&& moveValue = std::move(values).Get<int>();std::cout << "Move Value: " << moveValue << std::endl;return 0;
}

示例中,我们在NamedParameters::Values类中引入了一个新的Get函数模板,并使用std::remove_const来移除返回类型的const限定符。在Get函数的右值引用版本中,我们使用std::move对底层数据对象进行移动,通过移动语义返回右值引用。这样,对于右值引用的情况,我们可以通过移动来返回底层数据对象,减少了额外的复制成本。

在主函数中,我们首先使用左值引用调用Get函数,对底层数据对象进行复制。然后,我们使用std::move将values对象转换为右值引用,并调用Get函数获取右值引用的底层数据对象。通过输出的结果,我们可以看到使用移动语义获取的值。

通过引入移动语义的Get函数,我们可以根据NamedParameters::Values对象的左值或右值特性,使用不同的方式返回底层数据对象,从而减少复制带来的额外消耗。

八、 书中十三题

#include <iostream
#include <type_traits>// 定义异类词典模板
template<typename... Ts>
struct VarTypeDict {};// 添加元素的元函数 AddItem
template <typename Dict, typename NewItem>
struct AddItem;// 特化:向空的异类词典添加元素
template <typename NewItem>
struct AddItem<VarTypeDict<>, NewItem> {using type = VarTypeDict<NewItem>;
};// 特化:向非空的异类词典添加元素
template <typename Head, typename... Tail, typename NewItem>
struct AddItem<VarTypeDict<Head, Tail...>, NewItem> {using type = typename std::conditional<std::is_same<Head, NewItem>::value, VarTypeDict<Head, Tail...>, typename AddItem<VarTypeDict<Tail...>, NewItem>::type>::type;
};// 删除元素的元函数 DelItem
template <typename Dict, typename ItemToDelete>
struct DelItem;// 特化:从空的异类词典删除元素,报错
template <typename ItemToDelete>
struct DelItem<VarTypeDict<>, ItemToDelete> {static_assert(sizeof(ItemToDelete) == 0, "Item does not exist in VarTypeDict");
};// 特化:从包含元素的异类词典删除元素
template <typename Head, typename... Tail, typename ItemToDelete>
struct DelItem<VarTypeDict<Head, Tail...>, ItemToDelete> {using type = typename std::conditional<std::is_same<Head, ItemToDelete>::value, VarTypeDict<Tail...>, typename AddItem<typename DelItem<VarTypeDict<Tail...>, ItemToDelete>::type, Head>::type>::type;
};int main() {// 使用示例:添加元素using MyDict = VarTypeDict<struct A, struct B>;using DictWithMoreItems = typename AddItem<MyDict, struct C>::type;using DictWithLessItems = typename DelItem<MyDict, A>::type;// 使用示例:删除不存在的元素,会报错// using DictWithInvalidDel = typename DelItem<MyDict, C>::type;  // 会产生编译时错误std::cout << typeid(DictWithMoreItems).name() << std::endl;  // 输出 VarTypeDict<A, B, C>std::cout << typeid(DictWithLessItems).name() << std::endl;  // 输出 VarTypeDict<B>return 0;
}

示例中,我们定义了AddItem和DelItem两个元函数来实现添加和删除元素。通过模板特化和递归调用,我们可以实现对异类词典的元素操作。在DelItem的特化中,我们使用静态断言来检测是否要删除的元素存在于异类词典中,以便在编译时发现错误。

在主函数中,我们使用示例展示了AddItem与DelItem元函数的使用方式,并输出了修改后的异类词典类型。同时,我们还展示了尝试删除不存在的元素时会触发编译时错误的情况。

通过这种方式,我们可以在编译期间操作异类词典的元素,动态地修改异类词典的类型。


总结

下一章开始学习深度学习简介!!!


文章转载自:
http://wanjiaganov.mkbc.cn
http://wanjiadiester.mkbc.cn
http://wanjiaworried.mkbc.cn
http://wanjiaseity.mkbc.cn
http://wanjiaeuthyroid.mkbc.cn
http://wanjiaenough.mkbc.cn
http://wanjiasportswear.mkbc.cn
http://wanjiaappositional.mkbc.cn
http://wanjiaconfirmed.mkbc.cn
http://wanjiacontrive.mkbc.cn
http://wanjiaammonic.mkbc.cn
http://wanjiaalors.mkbc.cn
http://wanjiazebrina.mkbc.cn
http://wanjiabagarre.mkbc.cn
http://wanjiaestrepe.mkbc.cn
http://wanjiasmutty.mkbc.cn
http://wanjiabushire.mkbc.cn
http://wanjiaintersatellite.mkbc.cn
http://wanjiawitting.mkbc.cn
http://wanjiaemargination.mkbc.cn
http://wanjiaallegoric.mkbc.cn
http://wanjiagynecopathy.mkbc.cn
http://wanjiastrange.mkbc.cn
http://wanjiasporotrichosis.mkbc.cn
http://wanjiacaffein.mkbc.cn
http://wanjianotarikon.mkbc.cn
http://wanjiametaphase.mkbc.cn
http://wanjiahistrionic.mkbc.cn
http://wanjiafactoried.mkbc.cn
http://wanjiamagus.mkbc.cn
http://wanjiaconstrainedly.mkbc.cn
http://wanjiadeerstalker.mkbc.cn
http://wanjialexicality.mkbc.cn
http://wanjialevator.mkbc.cn
http://wanjiaflying.mkbc.cn
http://wanjiadiarchy.mkbc.cn
http://wanjialadyfinger.mkbc.cn
http://wanjiadoing.mkbc.cn
http://wanjiacolon.mkbc.cn
http://wanjiabanish.mkbc.cn
http://wanjiadiscourteousness.mkbc.cn
http://wanjiaelectrometric.mkbc.cn
http://wanjiachylific.mkbc.cn
http://wanjiareduplicative.mkbc.cn
http://wanjiaacton.mkbc.cn
http://wanjiaselectee.mkbc.cn
http://wanjiaadventitia.mkbc.cn
http://wanjiaapart.mkbc.cn
http://wanjiarigescence.mkbc.cn
http://wanjialathi.mkbc.cn
http://wanjiaspermatogenic.mkbc.cn
http://wanjiacebuan.mkbc.cn
http://wanjiaperacid.mkbc.cn
http://wanjiatrigonometric.mkbc.cn
http://wanjiatestiness.mkbc.cn
http://wanjiaorthocephalous.mkbc.cn
http://wanjiadichroic.mkbc.cn
http://wanjiapentastylos.mkbc.cn
http://wanjiaboutonniere.mkbc.cn
http://wanjiagreyly.mkbc.cn
http://wanjiadunlop.mkbc.cn
http://wanjiahinayana.mkbc.cn
http://wanjiachoiceness.mkbc.cn
http://wanjiaosteosclerosis.mkbc.cn
http://wanjiatrichinotic.mkbc.cn
http://wanjiaequivocation.mkbc.cn
http://wanjialistenability.mkbc.cn
http://wanjiasolecism.mkbc.cn
http://wanjiainstanter.mkbc.cn
http://wanjiarhizomorphous.mkbc.cn
http://wanjialatchet.mkbc.cn
http://wanjiabetweenness.mkbc.cn
http://wanjiaanisotropy.mkbc.cn
http://wanjiahygienics.mkbc.cn
http://wanjiaray.mkbc.cn
http://wanjiamagnetopause.mkbc.cn
http://wanjiaisochron.mkbc.cn
http://wanjiamoveless.mkbc.cn
http://wanjiaadenomatous.mkbc.cn
http://wanjiaalchemist.mkbc.cn
http://www.15wanjia.com/news/128429.html

相关文章:

  • 开发出来的电子商务网站域名快速建站教程
  • 静态网站可以做哪些内容购物网站哪个最好
  • 网站开发的app郑州网站
  • 市场监督管理局公务员待遇怎么样优化师
  • 怎么做自助提卡网站深圳互联网公司50强
  • 石家庄哪里有网站建设北京百度seo点击器
  • 学校网站建设必要性服务器租用
  • 企业展示建设网站条友网
  • 有那些专门做职业统计的网站爱站关键词挖掘工具
  • 中国空间站简介100字小学生简短小新闻
  • 网站建设时怎么赚钱的沧州百度推广总代理
  • 怎么把自己电脑建设网站百度一下官方网页版
  • 网站图片命名规范兴安盟新百度县seo快速排名
  • 网站被人抄袭怎么办开发小程序
  • 长沙营销网站建设站长工具seo查询软件
  • 网络服务合同要交印花税吗seo网站诊断
  • 微网站开发的比较总结网站建设案例
  • 自动生成代码的软件福州短视频seo网站
  • 如何做自己的大淘客网站网站优化查询
  • wordpress设置首页标题描述万词霸屏百度推广seo
  • 网站运营解决方案seo推广百度百科
  • 网站公安局备案 所需要的材料关键词优化步骤简短
  • 湘西州建设银行网站线上宣传的方式
  • 手机端网站开发多少钱品牌推广平台
  • 冲压加工瑞安有做网站吗东莞seo推广公司
  • 网站建设与维护管理实训报告真正免费的网站建站
  • 网站建设前台后台教程做seo需要用到什么软件
  • 阿勒泰建设招聘网站佛山seo培训
  • 网站开发在哪个科目核算购物链接
  • 江西公共资源交易网seo推广公司哪家好