问题标签 [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.

0 投票
1 回答
846 浏览

c++ - 从模板参数中检索基本类型

是否有可能以某种方式获得某个类的基础,以便它可以像这样传递到模板链上(伪代码)

为了避免

为什么这是必要的?

我有两种不同类型的资源,那些在主内存中,那些在 gpu 内存中,目前看起来像:

我也有这些资源的句柄。这个想法是你会有

get 函数要求缓存获取资源的位置。缓存返回 cpu_resource 或 gpu_resource,而句柄动态将其转换为模板化资源(在上述情况下为 image )。

缓存本身就是一个模板

其中资源库应该是 cpu_resource 或 gpu_resource 之一,在缓存模板的各种成员函数中具有适当的特化。

所以句柄,保持一个指向缓存的指针,必须知道它是一个句柄的资源的基本类型。

具体来说

我试图概括这个问题,以便我可以更快地得到答案,但这没有用,所以也许这会。如果您需要更多细节,请询问。

0 投票
3 回答
204 浏览

c++ - 使 is_reference 在函数模板内工作以供参考,而无需知道要在其上实例化函数的类型

这是代码

输出0也是foo(c2)我不想要的。

在里面foo如何检查是否T是引用类型?我不想调用foofoo<C&>(c2)即我们不知道函数在哪种类型上被实例化。

0 投票
1 回答
994 浏览

c++ - enable_if 对类模板的成员模板函数

这似乎是 MSVC10 中的错误?

错误 C2770:无效的显式 template_or_generic 参数“enable_if::type A::t(void)”。

以下编译:

0 投票
4 回答
1203 浏览

c++ - 类型特征与静态成员的优势?

我有一个带有子类的类 ( Voxel),这些子类可能有也可能没有许多不同的属性(材料、密度等),带有 get 和 set 方法。现在,我想写一些代码如下:

因此,我想实现VOXEL_HAS_MATERIALandVOXEL_HAS_DENSITY部分。两个简单的选项是:

  1. 向类添加静态hasMaterial()hasDensity()方法Voxel,以在派生类中被覆盖。
  2. hasMaterial()用and创建一个类型特征类,hasDensity()并为每个Voxel子类专门化它。

使用方法 (2) 允许为原始类型(int 等)定义特征,但这在我的情况下没有用。在这里使用类型特征是否有任何进一步的优势,或者我应该采用更简单的静态方法方法吗?

注意:我也知道基于 SFINAE 的方法,我将单独考虑。

Edit1:我更改了示例代码以显示模板的使用。我正在寻找这个问题的静态解决方案而不是运行时解决方案。理想情况下,如果编译器确定无法针对给定类型执行 if 语句中的代码,则编译器将能够去除这些代码。

0 投票
3 回答
235 浏览

c++ - 为模板化类定义特征

我了解如何创建类型特征然后专门针对特定类,但就我而言,我想专门针对类模板。下面的代码无法编译,但想法是 MyTemplatisedClass 的 Traits 特化应该适用于用户决定与 MyTemplatisedType 一起使用的任何类型。

这是可能的还是我要求太多了?根据编译器,第一个问题是

哪个是正确的,但我该如何解决这个问题?如果它有什么不同,我不需要它来为非模板化的课程工作,只是模板化的课程就可以了。 编辑:实际上,如果它适用于模板化和非模板化类,那就太好了。

0 投票
2 回答
3332 浏览

c++ - 获取可取消引用类型的 value_type

对于任何可取消引用的类型,我将如何实现以下目标?

我发现我目前的解决方案缺乏,因为我需要为我希望它使用的每种类型进行类模板专业化:

我已经尝试了一些方法,但它不起作用。

0 投票
3 回答
2333 浏览

c++ - operator<< 智能指针的重载

我想重载 operator<< 以允许它与shared_ptr.

我的第一次尝试如下,但问题是它还启用了任何类的行为。

我的第二次尝试如下:

此解决方案的问题不适用于继承 foo 的类型,因为T无法自动推断。

所以我可以跳过UT改用,在这种情况下,将从第二个参数推导出 T 并且参数 foro可以转换为foo<T>.

但是以下将不起作用:

关于如何制定可行的解决方案的任何想法?

0 投票
1 回答
3321 浏览

c++ - 获取 lambda 参数类型

我想要某种方法来获取 lambda 函数的第一个参数类型,这可能吗?

例如

代替:

我想:

根据 Xeo 的回答,这就是我在 VS2010 中所做的工作:

我试过简化代码,但任何尝试似乎都会破坏它。

0 投票
3 回答
323 浏览

c++ - 有没有办法使用静态断言和类型特征防止一个类从两次派生?

我意识到这是一个人为的例子,但我想要一个编译检查来防止这种情况......

0 投票
1 回答
358 浏览

c++ - 如何使用静态断言和类型特征防止嵌套模板类型中的菱形图案?

可能重复:
有没有办法防止一个类使用静态断言和类型特征从两次派生?

我要防止的是不止一个基于 C 的模板在 D 中派生(即,应该只有一个 C 派生实例)。希望在 C 或 B 中可能有一个静态断言可以解决这个问题。