问题标签 [template-templates]
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++ - 绑定元函数:接受类型和模板模板参数(接受任何东西)
我正在尝试编写一个Bind
元编程模板帮助器元函数,它将模板参数绑定到某些东西。
我有一个简单模板元函数的工作实现:
但是如果MakePair
的模板参数是模板模板呢?还是简单的数值?
很多不必要的重复。如果模板参数在类型、模板模板和整型常量之间混合使用,就会变得难以管理。
类似下面的代码可能吗?
ANYTHING
将接受类型、模板模板、模板模板模板、整数值等...
c++ - 在模板模板参数中抛出多个模板类 - 模板绑定?
给定以下课程:
我现在可以编写如下代码:
将除一个以外的所有参数都指定的多参数类放在 B 中的最优雅方法是什么?像带有 int 键的地图?我唯一能想到的是:
是否有这样的模板等效于 std::bind,我们可以只提供一部分参数并让其中一个保持打开状态?我很确定该语言没有提供此功能,但人们之前一定已经解决了这个问题。
c++ - 使用模板模板参数从可变参数模板合并类型
我正在尝试扩展通过模板模板传递的参数列表。第一个示例有效,第二个示例无效。我正在寻找的结果将是第二个示例cWapperObject.cMemberVariable.cTuple
中的类型为std::tuple<double, float, short, int>
. 我怎样才能做到这一点?(请不要在评论或答案中提及图书馆提升)。
示例 1:
示例 2:
c++ - 通过模板-模板参数使用枚举标记对象
我想使用模板的枚举参数来限制第二个参数,一个类,反过来将枚举的成员作为参数作为模板参数。在代码中,我希望这看起来像:
但是,这应该可行:
应该失败,因为ENotAnObjectTag::CAT_OTHER
它不是EObjectTag
.
我的实现(尝试)如下,并在编译期间(在 gcc 版本 4.9.2(Ubuntu 4.9.2-10ubuntu13)上)出现错误消息:
source.cc:16:45:错误:“SUBOBJECT_TAG”未在此范围结构 CObject> 中声明
最后一个用例涉及用 CObject 替换 CSubObject,以便我们可以使用递归来定义标记对象的层次结构,这也需要使用可变参数模板来在同一级别拥有多个对象。例如:
注释掉的对 EBase(库内部的枚举)的引用是为了保持 CObject 的模板参数一致,我会计划(如果可能)通过模板专业化或默认参数自动执行此操作。
我指定此对象层次结构的目标还包括:
- 避免强迫这个库的用户在他们的程序中定义额外的类或结构
- 通过使用枚举的 CObject 模板来利用编译时检查,其函数又使用该枚举作为所有 CObject 共有的一组函数的参数
c++ - 使用 libtooling 获取完全限定的模板模板参数名称
我正在尝试使用模板模板参数libtooling
打印CXXRecordDecl
模板类的实例。不幸的是,模板模板参数的字符串表示不是完全限定的(例如,它缺少名称空间)。
我正在CXXRecordDecl
使用以下代码打印:
这是一个示例,我希望输出为ns::A<ns::B>
,但我得到ns::A<B>
:
如何使用模板模板参数打印类的完全限定名称?
在相关的说明中,有没有办法在不调用的情况下做到这一点getCanonicalTypeInternal
,这听起来像一个内部函数?
[编辑#1]我也试过decl->getQualifiedNameAsString()
了,它完全省略了模板参数和输出ns::A
。
[编辑#2] Cling 将一组问题换成另一组问题。它确实为模板模板参数正确生成了完全限定的类型。但是,它会为函数(和函数指针)的参数和返回类型生成非限定名称。例如,下面的代码生成输出ns::A<void (B)>
而不是ns::A<void (ns::B)>
:
[编辑 #3]我在 Cling 问题跟踪器上针对上述问题发布了一个问题。请注意,查看该页面需要您使用 CERN 轻量级帐户登录。有关创建帐户的说明,请参阅此页面。
c++ - 模板模板参数的部分特化
我很感激帮助Manufacturer
为模板模板参数部分专门化模板()?这是我目前(不成功)的尝试。
c++ - 专门化模板模板参数的麻烦
我经常使用以下构造将运行时(动态)参数转换为编译时(静态)参数
例如
到目前为止,一切都很好。但现在我有另一个template
论点,也blah()
想有同样的template
论点。也就是说,从概念上讲,我想
但是,当然,这是不允许的(template
在功能块范围内blah()
)。那么正确的解决方案是什么?
请注意,我可以将所有内容放在辅助类模板中
但这是笨拙和不令人满意的。有替代或更好的解决方案吗? 我试过这个:
但是 gcc (5.1.0) 抱怨它S::special
被解析为非类型,而实例化产生一个类型......这是错误的(我认为):实例化产生一个模板(无论如何typename
按照建议插入没有帮助)。那么有什么问题和/或如何正确/更好地做到这一点?
c++ - 带有模板模板参数的 CRTP
以下代码无法编译...
行有编译错误-Derived(const T& _t) : Base<T, Derived>(_t) { }
错误 C3200 '`anonymous-namespace'::Derived':模板参数 'D' 的模板参数无效,需要类模板
如果我提供具有模板参数而不是 Derived 本身的任何其他类,则此方法有效
c++ - 是否可以完善转发模板模板参数
我知道如何完善转发参数。但是,我从不同的来源(例如 Effective Modern C++ Item 24 - Scott Meyers)读到,只有当您拥有确切的模板名称时,才能完美转发,例如:
我正在寻找的是是否有一种方法可以完善转发模板模板参数,例如:
当我编译上述内容时,我收到一条错误消息:“您无法将左值绑定到右值引用”(VC12),这向我表明编译器不将 && 识别为“通用引用”,而是将其识别为右值引用. 这种完美的转发可能对我有用,因为我可以利用推断的 TypeT 和 Size。
问题:是否可以完善转发模板模板参数?如果是这样,我的语法在哪里不正确?
谢谢!