typetraits相关内容

当 malloc 非平凡类型时会发生什么?

只能通过调用 std::malloc 创建平凡类型的对象(包括数组). 我从 http://en.cppreference.com/w/cpp/阅读它types/is_trivial,在 Note 部分下.所以如果我有一个非平凡类型 T,如果我使用 std::malloc(sizeof(T)) 会发生什么? 解决方案 std::malloc 只是旧 C(不是 C++)函数的“重命名" ..
发布时间:2021-09-12 18:40:17 其他开发

iterator_traits SFINAE 友好性

阅读 cppreference 中的摘录时 如果Iterator没有五种成员类型difference_type、value_type、pointer、reference 和 iterator_category,那么这个模板没有任何这些名字的成员(std::iterator_traits 是 SFINAE 友好的) 我自动认为这意味着每个成员类型都是在迭代器本身中定义时定义的.但是你瞧, ..
发布时间:2021-09-12 18:40:14 C/C++开发

检查类是否具有 typedef(私有或其他)的特征

有没有办法检查 class 是否有一个 typedef 甚至适用于 private typedef? 以下代码在 VS2013 中有效,但在 ideone 的 gcc 上失败 template结构体 to_void{typedef 空类型;};Foo类{typedef int TD;};模板 结构 has_TD : std::false_type {};模板 struct has_TD: ..
发布时间:2021-09-12 18:40:12 C/C++开发

输入特征以获取 std::array 或 C 样式数组的元素类型

我想要一个类型特征来获取 std::array 或普通旧 C 样式数组的元素类型,例如.当与 std::array 或 char[3] 一起提供时,它应该返回 char. 执行此操作的机制似乎只是部分到位...我可以在 std::array 和 std 上使用 ::value_type::remove_all_extents 在普通数组上,但我找不到结合两者的单一类型特征,我无法自己编写一个 ..
发布时间:2021-09-04 20:52:29 C/C++开发

解决静态断言中的不完整类型

当表达式依赖于类类型本身时,有没有办法在类内部进行 static_assert ?也许延迟评估直到类型完成或模板实例化之后? 示例代码: #include 模板结构测试{T x = 0;//使非平凡static_assert(std::is_trivial>::value, "");};int main() {//想要静态断言失败,而是得到“不完整类型"错误测试测试1;测试 ..
发布时间:2021-09-04 20:52:23 C/C++开发

参数包感知 std::is_base_of()

是否有可能静态断言作为模板参数提供的类型是否实现了参数包中列出的所有类型,即.参数包感知 std::is_base_of()? template 类 CommonBase{static_assert(is_base_of::value, "Invalid.");^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^std::is_base_of() 的参数包感知版本民众:模板 T* ..
发布时间:2021-09-04 20:51:17 C/C++开发

仅匹配某些类型的模板函数?

我想定义一个函数模板: templatevoid foo(T arg) 但我希望 T 只匹配某些类型.具体来说,T 应该从某个基类派生(可能通过多重继承).否则,此模板不应包含在重载集中. 我该怎么做? 解决方案 使用 SFINAE 和 std::is_base_of: template ::value>>void foo(T arg); 如果T 继承自Foo,那么它只会在重 ..
发布时间:2021-09-04 20:47:51 C/C++开发

提升特征以检查对象是否为 STL 容器

我正在我的项目中重构一个序列化库,以便它编译-std=c++11 并且想要识别一个对象是否是一个 STL 容器,例如 is_stl_deque::valueis_stl_list::valueis_stl_vector::valueis_set::valueis_map::valueis_pair::valueis_sequence::value 是否有任何增强特性来检查对象是否是 STL 容 ..
发布时间:2021-08-30 19:25:07 C/C++开发

使用模板类和智能指针中的常量限定进行模板推导

假设我有一个模板化的类,以及一个函数,它在一个指向 const 的共享指针中接受它,使用它的模板参数作为其签名的一部分: template class SomeClass {};//不需要修改 SomeClass 对象.模板T DoSomething(std::shared_ptr>); 在这种情况下,我可以通过显式指定模板参数,使用指向非成本 SomeClass 的共享指针调用 DoSome ..
发布时间:2021-07-23 19:45:58 C/C++开发

检测 C++ 中是否存在类型

我需要一个可以这样调用的模板: int x = type_exists>::值; 如果 #include 在源代码中较早出现(显式或可传递),则应将 x 设置为 1,否则应将 x 设置为 0. 是否可以用 C++ 来实现?我正在使用 GCC,所以 GCC 扩展也很好. 稍微改变调用语法也可以. 运行 C++ 编译器两次是不行的:首先只是为了确定我们是否遇到编 ..
发布时间:2021-07-23 19:45:02 C/C++开发

如何使用 result_of 而不是 decltype?

在这个答案中,我创建了一个类型特征: template使用 to_string_t = decltype(to_string(declval())); 这很好用,但我最初打算使用 result_of,现在让我很恼火,我不知道该怎么做. 我试图用这样的东西替换上面的行: template使用 to_string_t = result_of; 但是我得到了一个编译器错误: 错 ..
发布时间:2021-06-13 19:39:14 C/C++开发

使用 constexpr、SFINAE 和/或 type_traits 重载 char*、char 数组和字符串文字的解析

我遇到了一个有趣的挑战,我一直试图解决它几个小时,但经过大量研究和多次尝试失败后,我发现自己在问这个问题. 我想编写 3 个重载函数,每个函数采用以下类型之一:const char*、const char(&)[N] 和 字符串文字(例如“BOO").我知道字符串文字只是一个字符数组,但在我解释我的方法时请耐心等待. 由于包装类,下面的两个函数能够区分前两种类型(const char* ..
发布时间:2021-06-13 19:38:51 C/C++开发

使用概念或 SFINAE 检查类是否具有带有 std::array 参数的模板化成员函数

简介 我想使用概念和/或类型特征检测类是否具有带有 std::array 参数的成员函数. 例如:下面的类将传递这个概念. class OStreamRealizationGood{模板uint8_t 发送(std::array数组)}; 到目前为止,我使用了一个概念技巧.诀窍是将大小定义为 0.所以我的概念是这样的: template概念 OStream = requires( ..
发布时间:2021-06-02 20:39:45 C/C++开发

C++ 类型特征提取模板参数类

在模板中,我想将模板参数向下钻取到真正的非模板化类型.所以: template 结构我的模板{//遗憾的是没有extract_Basetypedef typename extract_base::MyType WorkType;};结构 X {};模板 结构模板{};//MyTemplate>::WorkType is X;//MyTemplate::WorkType is X; 我看到的唯一 ..
发布时间:2021-06-02 20:38:54 C/C++开发