问题标签 [decltype]

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 投票
1 回答
2054 浏览

c++ - c++推演“非类型函数指针”类模板参数

考虑一个模板类,如:

这可以通过使用实例化:

但是显式声明返回值类型似乎是不必要的。我想要实现的是:

不幸的是,我不是 c++ 期望的,这似乎是语言的一个隐藏角落(至少对我来说)。

如果我可以从指向函数的指针获取其类型 - 类似于: std::tr1::result_of<&fn>::type // 错误 1 ​​错误 C2923: 'std::tr1::result_of' : 'fn1 ' 不是参数 '_Fty' 的有效模板类型参数

该错误是有道理的,因为该参数根本不是“类型”

C++0x 有 decltype(&fn1) 但那是几年后的事了。

在 C++03 (+ tr1) 中有什么方法可以做到这一点?

限制: - 我不想传递函子,f1 和 f2 必须保留具有返回值的全局函数(不能将其移动到参数)。)

0 投票
3 回答
6720 浏览

c++ - 在 C++11 中使用 auto 和 decltype

我正在尝试学习当前接受的 c++11 功能,但我在使用 auto 和 decltype 时遇到了问题。作为一项学习练习,我正在使用一些通用函数扩展 std 类列表。

对于成员映射,我希望返回类型是通用的,具体取决于传递的函数返回的内容。所以对于返回类型,我可以做这样的事情。

这还需要删除函数模板中的浮点类型。

我可以使用模板类,但这会使实例的使用更加冗长,因为我必须指定返回类型。

总而言之,我试图弄清楚如何在不使用模板类的情况下定义地图,并且仍然在它返回的类型中具有通用性。

0 投票
2 回答
1704 浏览

c++ - 如果从 lambda 内部调用,则无法实例化使用 decltype 推断返回类型的函数模板?

我正在尝试使用 C++0x,特别是 lambda 表达式和 decltype 来简化我的一些代码,使用 MSVC10 RC 编译器。

我遇到了以下非常奇怪的问题:

如注释中所示,编译器在该行生成错误foo([]() { })

我讨厌大喊“编译器错误”,但我真的看不出这个错误有什么好的解释。显然,在外部 lambda 表达式内部时,编译器无法 foo为内部 lambda 专门化函数模板。

但是,如果将 的定义foo更改为硬编码返回类型,如下所示:

然后一切都编译得很好。

当用于在我不知道的另一个 lambda 范围内推断 lambda 表达式参数的返回类型时,是否存在一些模糊的 decltype 怪癖?

0 投票
2 回答
22021 浏览

c++ - std::result_of 和 decltype 之间的区别

我在理解std::result_ofC++0x 中的需求时遇到了一些麻烦。如果我理解正确的话,result_of是用来获取调用具有某些类型参数的函数对象的结果类型。例如:

我真的看不出与以下代码的区别:

或者

我可以看到这两种解决方案的唯一问题是我们需要:

  • 有一个函子的实例以在传递给 decltype 的表达式中使用它。
  • 知道函子的定义构造函数。

我是否认为decltype和之间的唯一区别result_of是第一个需要表达而第二个不需要?

0 投票
3 回答
4296 浏览

c++ - decltype 和括号

我不明白 FCD 第 148 页上示例的最后一行(第 7.6.1.2/4 节):

为什么括号在这里有所不同?它不应该只是double像上面的那行吗?

0 投票
3 回答
1314 浏览

c++ - 在 C++ 中使用 decltype()、auto 或 RTTI 进行类型相等测试?Boost有这方面的东西吗?

我正在编写一些代码来将 C++ 类型转换为 SQL DB 的适当类型。我想识别类型,然后根据它是什么,生成适当的 SQL 代码。我不确定通过使用 RTTI、auto 或 decltype 在这方面可以做什么。我有一些想法,但我不确定它们是否可行。

例如(我知道以下可能不是有效的 C++,我只是想理解这个想法):

或者

或者

或者

任何这些看起来都可以工作,或者有没有人有关于如何去做的建议?提前感谢您提供的任何意见。

0 投票
7 回答
6755 浏览

c++ - 使用带有可变参数模板函数的 decltype 的尾随返回类型

我想编写一个简单的加法器(用于咯咯笑),它将每个参数相加并返回具有适当类型的总和。目前,我有这个:

在 GCC 4.5.1 上,这似乎适用于 2 个参数,例如 sum(2, 5.5) 返回 7.5。但是,使用比这更多的参数,我得到 sum() 根本没有定义的错误。但是,如果我这样声明 sum() :

然后它适用于任意数量的参数,但 sum(2, 5.5) 将返回整数 7,这不是我所期望的。如果有两个以上的参数,我假设 decltype() 必须进行某种递归才能推断出 t + sum(p...) 的类型。这是合法的 C++0x 吗?还是 decltype() 仅适用于非可变声明?如果是这样,您将如何编写这样的函数?

0 投票
1 回答
1518 浏览

c++ - 使用 decltype() 和 SFINAE 的错误

为了回应 .. 某处的其他问题,我编写了这段代码。

现在在我看来,如果 T 提供了一个接受双右值和模板参数文字的非静态成员函数“apply”,则结果应该为真,否则为假。但是,在编译时,给出的示例实际上无法为 B 类编译has_apply<B>。在 decltype 语句中替换 T 失败的事实不应该意味着它只是调用另一个函数吗?这不是 SFINAE 的重点吗?

以最荒谬、最无意义的方式解决:

0 投票
3 回答
611 浏览

c++ - CRTP 失败 w/decltype

对我来说似乎很简单。但是 MSVC 无法编译。

即使编译器很乐意接受调用该函数。下面的示例编译得很好。

我在尝试使用模板参数中的任何类型时遇到了同样的问题。

而 B 类清楚地定义了一种称为“某物”的类型。编译器非常乐意在 T、T& 或 T* 类型的对象上调用函数,但我似乎无法从 T 访问任何类型。

0 投票
3 回答
532 浏览

c++ - decltype 问题

几分钟前,我试图做这样的事情:

请查看代码中的注释(就在班级名称下方)