问题标签 [template-meta-programming]
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++ - 跨不同 C++ 程序的唯一类型标识符
有没有办法自动(即不是手动)为共享公共源代码的不同程序中的类型分配唯一标识符?我需要一个程序来告诉另一个“使用类型 X”,而另一个程序会知道“X”是什么意思。当然,他们会(部分)共享源代码,因为你不能在运行时构造类型,我只想要一种自动的方式来构造从某种标识符(整数或字符串)到例如返回给定类型对象的工厂函数的映射.
我会选择的一个明显的选择是name()
in的结果std::type_info
,但据我所知,这甚至不能保证在不同类型之间是不同的,并且使用std::type_info
实例地址肯定不会跨程序工作。
我不能使用 C++11,但可以为此使用 Boost。
c++ - 如何在编译时检测类型是否为 lambda 表达式?
假设我有一个my_struct
包含成员变量的类型f
,它是一个函数。有可能f
成为一个 c++11 的 lambda 函数。
由于分配给 lambda 对象是非法的,我想以my_struct
这样的方式实现 的赋值运算符,即当f
是一个 lambda 时,它没有被分配。
是否有可能构建一个类型特征is_lambda
来检查一个类型的 lambda-ness?
在代码中:
c++ - 在 C++ 方法中创建模板类?
如何执行以下操作,而不必在此文件中包含每个类 T?:
基本上,我想要一个通用类实例化器。我怎样才能做到这一点,而不包括无处不在的标题?
c++ - 删除模板类后内存泄漏
如果我有以下课程:
- 删除 temp 会导致内存泄漏吗?
- 因为程序不知道 T 的大小?
- 如果是这样,我该如何避免它?
c++ - 计算模板元编程?
一段时间以来,我一直试图想出一个创造性的解决方案来解决这个问题(打开和关闭),但我还没有能够做到。我最近认为它可能可以通过模板元编程来解决,但由于我相对缺乏该技术的经验,我不确定。
是否可以使用模板元编程(或使用 C++ 语言的任何其他机制)来计算从某个基类派生的类的数量,从而为每个派生类赋予唯一的静态类标识符?
提前致谢!
c++ - 模板元编程:原始递归?
在这篇文章中,作者断言:
...该程序确实表明模板实例化机制是一种原始递归语言,可以在编译时执行非平凡的计算。
我发现这很有趣,因为我帮助教授了一门计算理论课程,该课程深入研究了原始递归函数的理论。然而,我的印象是模板元编程是图灵完备的,这是一个比说它是原始递归更严格的陈述......毕竟,创建一个无法停止的模板元程序并不是很困难.
我错过了什么吗?模板元编程是一种严格的原始递归语言,还是我认为它涵盖更广泛的程序是正确的?
c++ - 获取可取消引用类型的 value_type
对于任何可取消引用的类型,我将如何实现以下目标?
我发现我目前的解决方案缺乏,因为我需要为我希望它使用的每种类型进行类模板专业化:
我已经尝试了一些方法,但它不起作用。
c++ - operator<< 智能指针的重载
我想重载 operator<< 以允许它与shared_ptr
.
我的第一次尝试如下,但问题是它还启用了任何类的行为。
我的第二次尝试如下:
此解决方案的问题不适用于继承 foo 的类型,因为T
无法自动推断。
所以我可以跳过U
并T
改用,在这种情况下,将从第二个参数推导出 T 并且参数 foro
可以转换为foo<T>
.
但是以下将不起作用:
关于如何制定可行的解决方案的任何想法?
c++ - 将可变参数模板链接在一起
如果X
将以下代码转换为使用 C++11 可变参数模板,并且应该支持任意数量的模板参数,它会是什么样子?
c++ - 获取成员的类型
注意:这个问题最初是在 2012 年提出的。在decltype
任何主要编译器完全实现说明符之前。除非您只能访问 C++03,否则您不应查看此代码。所有主要的 C++11 兼容编译器现在都支持decltype
.
有没有一种简单的方法来检索成员的类型?
在 C++03 中
我实际上正在这样做(即有点懒惰):
但不必强制用户指定成员的类型,我希望编译器以实用的方式生成它。