问题标签 [typetraits]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从模板参数中检索基本类型
是否有可能以某种方式获得某个类的基础,以便它可以像这样传递到模板链上(伪代码)
为了避免
为什么这是必要的?
我有两种不同类型的资源,那些在主内存中,那些在 gpu 内存中,目前看起来像:
我也有这些资源的句柄。这个想法是你会有
get 函数要求缓存获取资源的位置。缓存返回 cpu_resource 或 gpu_resource,而句柄动态将其转换为模板化资源(在上述情况下为 image )。
缓存本身就是一个模板
其中资源库应该是 cpu_resource 或 gpu_resource 之一,在缓存模板的各种成员函数中具有适当的特化。
所以句柄,保持一个指向缓存的指针,必须知道它是一个句柄的资源的基本类型。
具体来说
我试图概括这个问题,以便我可以更快地得到答案,但这没有用,所以也许这会。如果您需要更多细节,请询问。
c++ - 使 is_reference 在函数模板内工作以供参考,而无需知道要在其上实例化函数的类型
这是代码
输出0
也是foo(c2)
我不想要的。
在里面foo
如何检查是否T
是引用类型?我不想调用foo
,foo<C&>(c2)
即我们不知道函数在哪种类型上被实例化。
c++ - enable_if 对类模板的成员模板函数
这似乎是 MSVC10 中的错误?
错误 C2770:无效的显式 template_or_generic 参数“enable_if::type A::t(void)”。
以下编译:
c++ - 类型特征与静态成员的优势?
我有一个带有子类的类 ( Voxel
),这些子类可能有也可能没有许多不同的属性(材料、密度等),带有 get 和 set 方法。现在,我想写一些代码如下:
因此,我想实现VOXEL_HAS_MATERIAL
andVOXEL_HAS_DENSITY
部分。两个简单的选项是:
- 向类添加静态
hasMaterial()
和hasDensity()
方法Voxel
,以在派生类中被覆盖。 hasMaterial()
用and创建一个类型特征类,hasDensity()
并为每个Voxel
子类专门化它。
使用方法 (2) 允许为原始类型(int 等)定义特征,但这在我的情况下没有用。在这里使用类型特征是否有任何进一步的优势,或者我应该采用更简单的静态方法方法吗?
注意:我也知道基于 SFINAE 的方法,我将单独考虑。
Edit1:我更改了示例代码以显示模板的使用。我正在寻找这个问题的静态解决方案而不是运行时解决方案。理想情况下,如果编译器确定无法针对给定类型执行 if 语句中的代码,则编译器将能够去除这些代码。
c++ - 为模板化类定义特征
我了解如何创建类型特征然后专门针对特定类,但就我而言,我想专门针对类模板。下面的代码无法编译,但想法是 MyTemplatisedClass 的 Traits 特化应该适用于用户决定与 MyTemplatisedType 一起使用的任何类型。
这是可能的还是我要求太多了?根据编译器,第一个问题是
哪个是正确的,但我该如何解决这个问题?如果它有什么不同,我不需要它来为非模板化的课程工作,只是模板化的课程就可以了。 编辑:实际上,如果它适用于模板化和非模板化类,那就太好了。
c++ - 获取可取消引用类型的 value_type
对于任何可取消引用的类型,我将如何实现以下目标?
我发现我目前的解决方案缺乏,因为我需要为我希望它使用的每种类型进行类模板专业化:
我已经尝试了一些方法,但它不起作用。
c++ - operator<< 智能指针的重载
我想重载 operator<< 以允许它与shared_ptr
.
我的第一次尝试如下,但问题是它还启用了任何类的行为。
我的第二次尝试如下:
此解决方案的问题不适用于继承 foo 的类型,因为T
无法自动推断。
所以我可以跳过U
并T
改用,在这种情况下,将从第二个参数推导出 T 并且参数 foro
可以转换为foo<T>
.
但是以下将不起作用:
关于如何制定可行的解决方案的任何想法?
c++ - 获取 lambda 参数类型
我想要某种方法来获取 lambda 函数的第一个参数类型,这可能吗?
例如
代替:
我想:
根据 Xeo 的回答,这就是我在 VS2010 中所做的工作:
我试过简化代码,但任何尝试似乎都会破坏它。
c++ - 有没有办法使用静态断言和类型特征防止一个类从两次派生?
我意识到这是一个人为的例子,但我想要一个编译检查来防止这种情况......
c++ - 如何使用静态断言和类型特征防止嵌套模板类型中的菱形图案?
我要防止的是不止一个基于 C 的模板在 D 中派生(即,应该只有一个 C 派生实例)。希望在 C 或 B 中可能有一个静态断言可以解决这个问题。