草庐IT

typetraits

全部标签

c++ - is_trivially_copyable 和 is_trivially_copy_constructible 有什么区别?

这些何时会给出不同的答案,这种差异何时有用(如果有的话)? 最佳答案 前者测试triviallycopyable属性,简而言之,这意味着该类型是memcpy-安全的。Atriviallycopyableclassisaclassthat:—hasnonon-trivialcopyconstructors(12.8),—hasnonon-trivialmoveconstructors(12.8),—hasnonon-trivialcopyassignmentoperators(13.5.3,12.8),—hasnonon-trivia

c++ - is_trivially_copyable 和 is_trivially_copy_constructible 有什么区别?

这些何时会给出不同的答案,这种差异何时有用(如果有的话)? 最佳答案 前者测试triviallycopyable属性,简而言之,这意味着该类型是memcpy-安全的。Atriviallycopyableclassisaclassthat:—hasnonon-trivialcopyconstructors(12.8),—hasnonon-trivialmoveconstructors(12.8),—hasnonon-trivialcopyassignmentoperators(13.5.3,12.8),—hasnonon-trivia

c++ - 为什么 C++11 类型特征不是别名模板?

Similarquestion:Whyaretype_traitsimplementedwithspecializedtemplatestructsinsteadofconstexpr?– butwithadifferentanswer.我意识到aliastemplatescannotbespecialised因此目前不能直接用于实现类型特征1。然而,这是委员会有意识的决定,据我所知,没有技术上的理由禁止这样做。那么将类型特征实现为别名模板,简化它们的语法不是更有意义吗?考虑typenameenable_if::value,size_t>::typeaddress(Tp);对enabl

c++ - 为什么 C++11 类型特征不是别名模板?

Similarquestion:Whyaretype_traitsimplementedwithspecializedtemplatestructsinsteadofconstexpr?– butwithadifferentanswer.我意识到aliastemplatescannotbespecialised因此目前不能直接用于实现类型特征1。然而,这是委员会有意识的决定,据我所知,没有技术上的理由禁止这样做。那么将类型特征实现为别名模板,简化它们的语法不是更有意义吗?考虑typenameenable_if::value,size_t>::typeaddress(Tp);对enabl

c++ - 没有编译器 Hook ,哪些<type_traits>无法实现?

C++11提供了标准的。没有编译器挂钩,它们中的哪一个是不可能实现的?注1:通过编译器挂钩,我指的是任何非标准语言功能,例如__is_builtin...。注2:许多方法可以不使用钩子(Hook)来实现(请参见C++TemplateMetaprogramming的第2章和/或ModernC++Design的第2章)。注3:上一个问题中的spraffanswer引用了N2984,其中某些类型特征包含以下注解:被认为需要编译器支持(感谢sehe)。 最佳答案 我已经写了一个完整的答案here-这项工作仍在进行中,因此即使我将文本剪切并粘

c++ - 没有编译器 Hook ,哪些<type_traits>无法实现?

C++11提供了标准的。没有编译器挂钩,它们中的哪一个是不可能实现的?注1:通过编译器挂钩,我指的是任何非标准语言功能,例如__is_builtin...。注2:许多方法可以不使用钩子(Hook)来实现(请参见C++TemplateMetaprogramming的第2章和/或ModernC++Design的第2章)。注3:上一个问题中的spraffanswer引用了N2984,其中某些类型特征包含以下注解:被认为需要编译器支持(感谢sehe)。 最佳答案 我已经写了一个完整的答案here-这项工作仍在进行中,因此即使我将文本剪切并粘

c++ - 检测私有(private)成员的存在

我想写一个类型特征来检查某个类型是否有成员member。如果member是public,则有多种方法可以做到这一点(例如void_t),其中最简洁的可能是Yakk'scan_apply(最终可以称为std::is_detected):structC{intmember;};templateusingmember_type=decltype(&T::member);templateusinghas_member=can_apply;static_assert(has_member{},"!");//OK但如果成员是private,则此trait失败,因为对member的访问是不正确的(我

c++ - 检测私有(private)成员的存在

我想写一个类型特征来检查某个类型是否有成员member。如果member是public,则有多种方法可以做到这一点(例如void_t),其中最简洁的可能是Yakk'scan_apply(最终可以称为std::is_detected):structC{intmember;};templateusingmember_type=decltype(&T::member);templateusinghas_member=can_apply;static_assert(has_member{},"!");//OK但如果成员是private,则此trait失败,因为对member的访问是不正确的(我

c++ - 检查成员是否存在,可能在基类中,C++11 版本

在https://stackoverflow.com/a/1967183/134841,提供了一种解决方案,用于静态检查成员是否存在,可能在某个类型的子类中:templateclasshas_resize_method{classyes{charm;};classno{yesm[2];};structBaseMixin{voidresize(int){}};structBase:publicType,publicBaseMixin{};templateclassHelper{};templatestaticnodeduce(U*,Helper*=0);staticyesdeduce(.

c++ - 检查成员是否存在,可能在基类中,C++11 版本

在https://stackoverflow.com/a/1967183/134841,提供了一种解决方案,用于静态检查成员是否存在,可能在某个类型的子类中:templateclasshas_resize_method{classyes{charm;};classno{yesm[2];};structBaseMixin{voidresize(int){}};structBase:publicType,publicBaseMixin{};templateclassHelper{};templatestaticnodeduce(U*,Helper*=0);staticyesdeduce(.