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

0 投票
2 回答
563 浏览

c++ - 绑定元函数:接受类型和模板模板参数(接受任何东西)

我正在尝试编写一个Bind元编程模板帮助器元函数,它将模板参数绑定到某些东西。

我有一个简单模板元函数的工作实现:

但是如果MakePair的模板参数是模板模板呢?还是简单的数值?

很多不必要的重复。如果模板参数在类型、模板模板和整型常量之间混合使用,就会变得难以管理。

类似下面的代码可能吗?

ANYTHING将接受类型、模板模板、模板模板模板、整数值等...

0 投票
1 回答
202 浏览

c++ - 在模板模板参数中抛出多个模板类 - 模板绑定?

给定以下课程:

我现在可以编写如下代码:

将除一个以外的所有参数都指定的多参数类放在 B 中的最优雅方法是什么?像带有 int 键的地图?我唯一能想到的是:

是否有这样的模板等效于 std::bind,我们可以只提供一部分参数并让其中一个保持打开状态?我很确定该语言没有提供此功能,但人们之前一定已经解决了这个问题。

0 投票
1 回答
308 浏览

c++ - 使用模板模板参数从可变参数模板合并类型

我正在尝试扩展通过模板模板传递的参数列表。第一个示例有效,第二个示例无效。我正在寻找的结果将是第二个示例cWapperObject.cMemberVariable.cTuple中的类型为std::tuple<double, float, short, int>. 我怎样才能做到这一点?(请不要在评论或答案中提及图书馆提升)。

示例 1:

示例 2:

0 投票
2 回答
92 浏览

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 的模板参数一致,我会计划(如果可能)通过模板专业化或默认参数自动执行此操作。

我指定此对象层次结构的目标还包括:

  1. 避免强迫这个库的用户在他们的程序中定义额外的类或结构
  2. 通过使用枚举的 CObject 模板来利用编译时检查,其函数又使用该枚举作为所有 CObject 共有的一组函数的参数
0 投票
1 回答
1313 浏览

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 轻量级帐户登录。有关创建帐户的说明,请参阅此页面。

0 投票
0 回答
193 浏览

c++ - 模板模板参数的部分特化

我很感激帮助Manufacturer为模板模板参数部分专门化模板()?这是我目前(不成功)的尝试。

0 投票
1 回答
66 浏览

c++ - 专门化模板模板参数的麻烦

我经常使用以下构造将运行时(动态)参数转换为编译时(静态)参数

例如

到目前为止,一切都很好。但现在我有另一个template论点,也blah()想有同样的template论点。也就是说,从概念上讲,我想

但是,当然,这是不允许的(template在功能块范围内blah())。那么正确的解决方案是什么?

请注意,我可以将所有内容放在辅助类模板中

但这是笨拙和不令人满意的。有替代或更好的解决方案吗? 我试过这个:

但是 gcc (5.1.0) 抱怨它S::special被解析为非类型,而实例化产生一个类型......这是错误的(我认为):实例化产生一个模板(无论如何typename按照建议插入没有帮助)。那么有什么问题和/或如何正确/更好地做到这一点?

0 投票
2 回答
1876 浏览

c++ - 带有模板模板参数的 CRTP

以下代码无法编译...

行有编译错误-Derived(const T& _t) : Base<T, Derived>(_t) { }

错误 C3200 '`anonymous-namespace'::Derived':模板参数 'D' 的模板参数无效,需要类模板

如果我提供具有模板参数而不是 Derived 本身的任何其他类,则此方法有效

0 投票
2 回答
223 浏览

c++ - 转发参考和模板模板

考虑这两个模板函数:

为什么前者接受左值(通过使用转发引用)而后者不接受?


看起来身份别名模板可以作为转发参考吗?也可能与此有关,但它似乎涵盖了转发引用限制的不同方面。

0 投票
1 回答
999 浏览

c++ - 是否可以完善转发模板模板参数

我知道如何完善转发参数。但是,我从不同的来源(例如 Effective Modern C++ Item 24 - Scott Meyers)读到,只有当您拥有确切的模板名称时,才能完美转发,例如:

我正在寻找的是是否有一种方法可以完善转发模板模板参数,例如:

当我编译上述内容时,我收到一条错误消息:“您无法将左值绑定到右值引用”(VC12),这向我表明编译器不将 && 识别为“通用引用”,而是将其识别为右值引用. 这种完美的转发可能对我有用,因为我可以利用推断的 TypeT 和 Size。

问题:是否可以完善转发模板模板参数?如果是这样,我的语法在哪里不正确?

谢谢!