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

0 投票
3 回答
1185 浏览

c++ - 使用 decltype 和 constness 的 C++11 尾随返回成员函数

我正在尝试使用 decltype 了解 C++11 中基于尾随返回的新函数声明语法。

在下面的代码中,我试图定义一个返回 const & 的成员函数以允许只读访问i

正如评论中提到的,只有最后一个评论版本的acc()作品,而使用其他的,代码只是编译和打印 value 1

问题:我们如何必须acc()使用基于 的新函数声明语法来定义函数decltype,使得这里的编译由于返回const &intin而失败modify_const,或者换句话说,acc()具有正确的const &int返回类型。

备注:正如预期的那样,使用int i;而不是int &i;作为成员变量X会产生编译错误。

编辑以分别更好地区分v和的常量X::i。这是我试图强加的后者acc()

0 投票
1 回答
978 浏览

c# - 学术:在协变泛型中使用基本类型的自动类型推导

我偶然发现 .NET 4.0 MS-C# 编译器的自动类型推导失败,我不得不“手动”指定类型。

这对我来说不是什么大问题,但足以让我好奇为什么编译器不能自动找到调用的正确类型。

我将调用减少到以下程序:

由于最后一次调用 Complex,代码无法编译,标记为“// 3”。

第一个调用简单直接 - 不涉及基类/子类。第二次调用只是“手动”指定所有参数。

我原以为编译器也会自动选择第二次调用中使用的参数来进行第三次调用。当然,第二个参数实际上是“Derived”,但这可以转换为“Base”,第一个参数需要 U 为“Base”类型。由于接口中的协变类型,where 子句应该仍然可以使用“Base”作为 U。

我不确切知道 C# 中泛型类型参数推导的规则,但我一直认为,它的工作原理有点像“如果参数只有一个可能的赋值,就使用这个。如果没有,拒绝编译。”

为什么编译器不自动检测类型?这是其中之一“如果编译器可以做到这一点,那么它也必须能够解决费马大定理” - 案例?:D

0 投票
2 回答
283 浏览

c++ - 为什么数组的类型推断优先于指向数组的指针而不是数组的引用?

p1是类型int *(与 相同p3)。特别是在这个简单的示例中,我发现p2( int (&)[1]) 更有用,因为它具有数组语义,例如,我可以应用sizeofon来给出与onp2相同的值。sizeofv

有没有关于这个的标准报价?

为什么默认引用是一个坏主意?(对于这种数组情况,我的意思是,这些天几乎没有 c++ 程序员关心它们......)

0 投票
5 回答
9496 浏览

c++ - C++ decltype 推导当前函数返回类型

我想自动推断出我正在编写的函数的返回类型。

例子:

到目前为止,我取得的最好成绩是

哪个有效但是:

  1. 如果我更改函数名称,我必须更改

    decltype(test())

    进入

    decltype(name())

  2. 如果我更改函数参数,我也必须更改

    decltype(test())

    进入

    decltype(test(param1, param2))

有没有更优雅的方式来做同样的事情?

0 投票
1 回答
5267 浏览

c++ - 将初始化列表与可变参数模板一起使用

我有以下代码:

无论好坏,这让我可以交替使用 fun(o, args...) 和 of(args...) 。当使用初始化列表作为参数时,使用它会遇到困难。例如

由于替换错误,这失败了,所以 Clang 说。注意,obj.fun({1, 2, 3});有效。

正如我从其他问题中理解的那样,这是因为初始化列表并不总是与模板参数推导很好地配合。

我最接近我想要的语法是使初始化列表更明确。为避免冗长,我有以下内容:

有没有办法获得我想要的语法或更接近它?


我的测试程序中 Clang 的错误报告是:

0 投票
1 回答
374 浏览

c++ - 带容器类型扣除的模板函数

我编写了一个函数来迭代listvector或者任何带有iteratoron 字符串的函数,并且该函数在字符串上返回一对相同类型的容器......

我写了以下内容,但我没有编译,我尝试将容器类型捕获为 C,将分配器捕获为 A。

重要的是,我只使用 C++98。

要调用该代码,我使用:

您知道如何编写该函数吗?

0 投票
1 回答
144 浏览

scala - 在从 Short 到 Int 的 Int 映射上定义的 Scala `+` 函子?

我正在为较小的序列化编写一个自定义树/图形容器,并且我得到一个编译器错误,显然添加一些东西到一个短的会产生一个 Int。

我不得不这样做,这似乎有点不寻常,因为 scala 令人印象深刻的类型推导:

编辑

啊,问题是,我该如何解决这个问题?

0 投票
1 回答
79 浏览

foreach - dmd can't infer type even when type is given

Here I want to lockstep iterate over two arrays of size_t

But this fails to compile with

However when I change the foreach line to use uint instead of size_t (I'm on a 32-bit laptop)

It compiles and runs just fine. What's going on?

0 投票
2 回答
1338 浏览

c++ - 带有 packaged_task 的模板无法编译

我正在使用 Antony Williams - C++ Concurrency in Action 一书中的示例 4.14,其中使用 std::packaged_task 和 std::thread 模拟了 std::async。

为什么当我取消注释行时此代码无法编译以及如何重写模板以使其工作?

编译错误:

0 投票
3 回答
1008 浏览

c++11 - Can I deduce the return type of a lambda without actually calling it?

It might seem obvious to some, but I was still wondering: is there no way to make the compiler deduce the lambda return type without actually calling it?

Of course you can auto retval = myLambda();, however I want sth like:

Why would I want that? Simple: