问题标签 [template-argument-deduction]
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++ - 推导非类型模板参数
是否可以从模板函数参数中推断出非类型模板参数?
考虑这个简单的模板:
我希望能够进行更改factorial
,以便我可以这样称呼它:
并让编译器在编译时计算出 N 的值。这可能吗?也许加上一些花哨的 C++11?
c++ - 用两个以上的参数推导 std::function
我想知道为什么std::function
只知道两个参数的功能。我编写了一些运行良好的代码,但有许多限制。欢迎任何反馈。特别是,我怀疑我正在重新发明轮子。
我的代码在ideone上,我会参考它。
例如,我可以用以下方式描述类型main
:
(其中“i”表示“int”,“PPc”表示指向字符的指针)
标准std::function
不适用于具有两个以上 args 的函数(请参阅我的代码的最后两行),但此代码可以(示例代码演示了三个 arg 函数)。也许我的设计应该在标准库中使用!我定义typedef tuple<Args...> args_as_tuple;
存储所有参数,而不仅仅是前两个参数类型。
主要技巧是在这个函数中的推导:
限制:
- 它不适用于 lambda。这不会编译
function_type_deducer([](){}).describe_me();
- 它没有注意到
x
and 和y
asy
需要 astring&
和 wherex
需要 a之间有细微的差别string
。(std::function 也没有注意到这一点)
关于如何解决这些问题的任何想法?我重新发明了轮子吗?
c++ - 模板参数推导
我目前面临一个我自己无法解决的问题。基本上我想要做的是在 C++ 中实现一些类似 linq 的行为。
我将从标题中的代码开始:
这就是我希望它被实例化的方式:
不用说这不起作用(否则我不会在这里:))
现在更奇怪的是,即使这样似乎也不起作用:
正如你所看到的(通过查看 select 函数),对我来说重要的是不要只使用这样的东西:
关于如何解决这个问题的任何建议?这甚至可能吗?
任何帮助,将不胜感激!
编辑:我得到的错误:
编辑2:
据我了解,编译器抱怨 C 不采用 2 个类参数,而是 1 个类参数和 1 个模板化类参数 (1),因为我将 C 定义为那样。有没有办法解决这个问题?
c++ - 使用强类型枚举的模板参数推导
如果我有一个普通(弱)枚举,我可以将其枚举值用作非类型模板参数,如下所示:
并将其称为:magic<Cat>(t)
据我所知,如果我有一个强类型枚举并且不想对枚举类型进行硬编码,我最终会得到:
现在我必须写: magic<Animal, Animal::Cat>(t)
,这似乎是多余的。
有什么办法可以避免同时输入枚举类和值,短
c++ - C++ 指向方法的指针模板推导在针对 x86 时无法编译,但适用于 x64
我有这个示例代码:
这与g++
. 它也可以与 VC10 一起编译,但仅限于为 64 位平台构建时。当我为 32 位平台构建时,我得到这个编译错误:
该错误表明正在使用非专业版本的 Gobstopper,这一定Signature
意味着int (void)
. 但错误也清楚地说Signature
是 int (void)
。那么错误从何而来?我该如何解决?
我唯一能想到的可能会从 32 位更改为 64 位并且不会出现在错误消息中显示的签名中的是调用约定;显然,VC x64 有一个统一的调用约定,而对于 x86,每个调用约定都是不同的。但即使这是问题所在,我也不知道如何解决它。
编辑:我应该提到我用常规(非成员)函数指针尝试了这个,效果很好。
c++ - 参数替换的 C++ 规则
在使用 boost scoped_ptr 的 C++ 多态性之后,我想了解 C++ 参数推导的规则。例如:
- 使用智能指针和容器时的 C++ 多态替换规则
- 常量和非常量参数之间的自动转换
- 什么时候可以将临时对象作为参考传递?
- 模板参数推导的规则有何不同。
如果标准中有相关部分,您可以指出这也会有所帮助。
c++ - 成员函数 & const 成员函数指针推导
我有以下代码:
它运作良好,但我不想为 const 和非常量成员函数指针有 2 个不同的函数。所以问题是:有没有办法合并
void foo(T&, const std::function<Ret()>&)
一个void foo(T&, Ret(T::*)() const)
函数?请注意,std::function
合并后也应参与解决的重载。我需要一些只接受成员函数指针的函数。所有其他的都将进入std::function
版本。
c++ - int a[5]和int(&a)[5]在模板参数推导中的区别
这个问题是关于采用静态已知大小的数组的函数。
以下面的最小程序为例:
运行时,它会打印预期的结果:
但是,当我尝试让我的编译器(VS 2010)推断5
出could not deduce template argument for 'int [n]' from 'int [5]'
.
一些研究导致arrfun_b
模板参数推导工作的更新:
arrfun_a
无论调用还是arrfun_b
调用,程序的结果都是一样的。
到目前为止,我发现的唯一区别是模板参数推导是否有效,以及是否可以使用不是 5 的 N 调用函数......
c++ - 从 std::function 调用签名推断模板参数
考虑这个模板函数:
为什么编译器不能ReturnT
从传递的调用签名中推断出来?
c++ - 默认模板参数:为什么编译器抱怨没有指定模板参数?
我有这个代码:
如果我foo()
使用相同的模板“签名”作为模板函数,编译器不会抱怨没有指定模板参数:
那么为什么我需要为具有默认参数的模板类指定参数,而不是为模板函数指定参数呢?我缺少一些微妙之处吗?
原因肯定是模板参数推导失败。但我想知道为什么。