typetraits相关内容
情况 我有一个模板类 TIppImage 用于 T 类型的图像.我有单例类 CIppMemoryManager,它可以存储许多不同大小和类型的图像. class CIppMemoryManager{民众:///... 单例接口 ...模板TIppImage* GetImage(width, height);私人的:CIppMemoryManager();~CIppMemoryManager
..
这是一个让我感到困惑的小问题.我不知道如何描述它,所以请看下面的代码: struct B {B(){}B(B&){std::cout ::value
..
只能通过调用 std::malloc 创建平凡类型的对象(包括数组). 我从 http://en.cppreference.com/w/cpp/阅读它types/is_trivial,在 Note 部分下.所以如果我有一个非平凡类型 T,如果我使用 std::malloc(sizeof(T)) 会发生什么? 解决方案 std::malloc 只是旧 C(不是 C++)函数的“重命名"
..
阅读 cppreference 中的摘录时 如果Iterator没有五种成员类型difference_type、value_type、pointer、reference 和 iterator_category,那么这个模板没有任何这些名字的成员(std::iterator_traits 是 SFINAE 友好的) 我自动认为这意味着每个成员类型都是在迭代器本身中定义时定义的.但是你瞧,
..
有没有办法检查 class 是否有一个 typedef 甚至适用于 private typedef? 以下代码在 VS2013 中有效,但在 ideone 的 gcc 上失败 template结构体 to_void{typedef 空类型;};Foo类{typedef int TD;};模板 结构 has_TD : std::false_type {};模板 struct has_TD:
..
我想要一个可以接受许多不同事物(为简单起见)的函数,如下所示: template typename type_to_return::type//
..
我想要一个类型特征来获取 std::array 或普通旧 C 样式数组的元素类型,例如.当与 std::array 或 char[3] 一起提供时,它应该返回 char. 执行此操作的机制似乎只是部分到位...我可以在 std::array 和 std 上使用 ::value_type::remove_all_extents 在普通数组上,但我找不到结合两者的单一类型特征,我无法自己编写一个
..
当表达式依赖于类类型本身时,有没有办法在类内部进行 static_assert ?也许延迟评估直到类型完成或模板实例化之后? 示例代码: #include 模板结构测试{T x = 0;//使非平凡static_assert(std::is_trivial>::value, "");};int main() {//想要静态断言失败,而是得到“不完整类型"错误测试测试1;测试
..
是否有可能静态断言作为模板参数提供的类型是否实现了参数包中列出的所有类型,即.参数包感知 std::is_base_of()? template 类 CommonBase{static_assert(is_base_of::value, "Invalid.");^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^std::is_base_of() 的参数包感知版本民众:模板 T*
..
我想定义一个函数模板: templatevoid foo(T arg) 但我希望 T 只匹配某些类型.具体来说,T 应该从某个基类派生(可能通过多重继承).否则,此模板不应包含在重载集中. 我该怎么做? 解决方案 使用 SFINAE 和 std::is_base_of: template ::value>>void foo(T arg); 如果T 继承自Foo,那么它只会在重
..
好的,昨天我发布了几乎相同的问题 这里,但我无法根据我的需要修改答案(工作)...我不想弄乱另一个主题,所以我开始了新的主题. 所以,我有 2 个(实际上大约 15 个)结构,它们可以组成一个对象 class MyBase{};template 结构A:公共超级{void doStuffA() { cout
..
我正在我的项目中重构一个序列化库,以便它编译-std=c++11 并且想要识别一个对象是否是一个 STL 容器,例如 is_stl_deque::valueis_stl_list::valueis_stl_vector::valueis_set::valueis_map::valueis_pair::valueis_sequence::value 是否有任何增强特性来检查对象是否是 STL 容
..
假设我有一个模板化的类,以及一个函数,它在一个指向 const 的共享指针中接受它,使用它的模板参数作为其签名的一部分: template class SomeClass {};//不需要修改 SomeClass 对象.模板T DoSomething(std::shared_ptr>); 在这种情况下,我可以通过显式指定模板参数,使用指向非成本 SomeClass 的共享指针调用 DoSome
..
我需要一个可以这样调用的模板: int x = type_exists>::值; 如果 #include 在源代码中较早出现(显式或可传递),则应将 x 设置为 1,否则应将 x 设置为 0. 是否可以用 C++ 来实现?我正在使用 GCC,所以 GCC 扩展也很好. 稍微改变调用语法也可以. 运行 C++ 编译器两次是不行的:首先只是为了确定我们是否遇到编
..
在这个答案中,我创建了一个类型特征: template使用 to_string_t = decltype(to_string(declval())); 这很好用,但我最初打算使用 result_of,现在让我很恼火,我不知道该怎么做. 我试图用这样的东西替换上面的行: template使用 to_string_t = result_of; 但是我得到了一个编译器错误: 错
..
我遇到了一个有趣的挑战,我一直试图解决它几个小时,但经过大量研究和多次尝试失败后,我发现自己在问这个问题. 我想编写 3 个重载函数,每个函数采用以下类型之一:const char*、const char(&)[N] 和 字符串文字(例如“BOO").我知道字符串文字只是一个字符数组,但在我解释我的方法时请耐心等待. 由于包装类,下面的两个函数能够区分前两种类型(const char*
..
简介 我想使用概念和/或类型特征检测类是否具有带有 std::array 参数的成员函数. 例如:下面的类将传递这个概念. class OStreamRealizationGood{模板uint8_t 发送(std::array数组)}; 到目前为止,我使用了一个概念技巧.诀窍是将大小定义为 0.所以我的概念是这样的: template概念 OStream = requires(
..
在模板中,我想将模板参数向下钻取到真正的非模板化类型.所以: template 结构我的模板{//遗憾的是没有extract_Basetypedef typename extract_base::MyType WorkType;};结构 X {};模板 结构模板{};//MyTemplate>::WorkType is X;//MyTemplate::WorkType is X; 我看到的唯一
..
我是cuda的新手,并尝试运行一个简单的vector add示例,我在网上找到了该示例以开始使用.我正在使用Win10 64位和Visual Studio 2017. #include"cuda_runtime.h"#include"cuda.h"#include"device_launch_parameters.h"#include#include//
..
问题可能很奇怪,所以这里是一个简短的激励示例: #include#include模板//gcc 8.3的解决方法,其中volatile int不可复制使用is_tc = std :: is_trivially_copyable
..