问题标签 [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.
c++ - `decltype`:函数返回类型`T`转换为用户定义类型的`T&`(VS2010)
编辑: GCC 编译得很好,这是 VS2010 问题。感谢您将我指向 ideone.com!
在尝试编译以下(VS2010)时:
我收到编译器警告:
对于内置类型来说一切都很好,但是对于用户定义的类型,decltype(...)
在模板函数FCall
中给了我TA&
而不是TA
,作为FCall
返回类型和局部变量FCall
。
我看不出它背后的逻辑,我认为标准说decltype(f())
应该准确给出返回类型 of f()
. 它适用于内置类型。用户定义的类型是否有一些隐藏的问题,或者只是 VS2010 对我耍花招?
PS 我无法访问 GCC,有人可以请检查 GCC 编译是否没有警告?
c++ - 将 rng 列表存储在 std::array 中以进行多线程处理
我想使用 C++11 对我的代码的 rng 部分进行多线程处理。
我创建了一堆这样的RNG:
有了这个想法,我以后可以将每个 RNG 对象传递给一个单独的对象,该对象使用提供的生成器用某种形式的随机数std::thread
填充另一个对象。array
我不知道我需要为 rng 使用什么类型array
。我知道如何创建一个 rng,如下所示:
但我需要明确地decltype
为array
.
c++ - `decltype` 作为模板函数声明中模板类型规范的一部分
以下代码在 MSVC++ 中编译,但在 GCC 4.5.1 中不编译:
注释指向有问题的行并显示修复(从设计的角度来看,这并不是真正的修复,只是编译修复)。几个问题:
MSVC++ 正确编译它吗?
如果我们要更改参数的顺序
auto Func( PF fF, PP && fP, TA< decltype( fF( std::forward<PP>( fP ) ) ), pB > && fA )
到
auto Func( PF fF, TA< decltype( fF( std::forward<PP>( fP ) ) ), pB > && fA, PP && fP )
它不会编译,因为编译器将fP
inTA< decltype( fF( std::forward<PP>( fP ) ) ), pB >
视为未声明的变量。从逻辑上讲,编译器此时是否真的需要知道fP
,它是否不解析整个声明,因为它是带有尾随返回类型的函数?为什么它不能“跳过”第二个函数参数并查看fP
稍后是否在函数声明中声明?或者我在这里遗漏了一些基本的东西(也许是标准中的一些段落)?
c++ - C++ 中的 decltype 和范围运算符
我需要获取实例化模板时提供的类型。考虑以下示例:
此代码的问题在于将范围运算符与 decltype 一起使用。Visual C++ 2010 抱怨如下:
错误 C2039:“TUnderlying”:不是“全局命名空间”的成员
我在 Wikipedia 上收集了有关该主题的一些信息:
在评论正式的 C++0x 委员会草案时,日本 ISO 成员团体指出“范围运算符 (::) 不能应用于 decltype,但它应该是。在获取成员类型的情况下会很有用(嵌套类型)来自实例如下“:[16]
David Vandevoorde 解决了这个问题以及类似问题,并于 2010 年 3 月投票通过了工作文件。
所以我认为 Visual C++ 2010 没有实现这个。我想出了这个解决方法:
我是否错过了任何更优雅、更简洁的解决方案?
c++ - decltype(function) 作为类成员
我有:
这会导致编译器错误消息稍微令人吃惊(g++ 4.6.1):
将成员名称更改为
并使用它会导致链接器错误:
这是预期的行为吗?
c++ - 为什么类不能从 decltype 的结果继承?
为什么一个类不能decltype
在继承列表中有一个?例如,我希望以下代码A<B>
继承自RType
,但使用 G++ 4.6.1(使用-std=c++0x
)它无法编译:
它提供以下输出:
的使用declval
只是为了提供一个你需要使用的实例decltype
,但其他的使用decltype
也会失败(即没有declval
)。
c++ - decltype(*&fun) 很奇怪?
我有:
产生
在 g++ 4.6.1 和 4.7.0 上。
谁能给我解释一下?
c++ - 在这种情况下,放入 decltype(x) 以指定返回类型的语法是什么
我有以下函数可以std::vector
在另一个容器中创建一个迭代器:
我想做的是:
我该怎么做x
才能让它发挥作用?
尝试但失败的尝试:
(另外,我不是这方面的专家,所以欢迎任何其他建议,评论!谢谢。)
c++ - 成员函数的 decltype
在以下示例中,如何获取成员函数的返回类型?
当然,问题是我在定义 MyClass 时没有“mygetter”对象。
我想要做的是:我正在创建一个缓存,它可以使用 getter 返回的任何内容,因为它是关键。