问题标签 [conversion-operator]
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++ - 如何使用模板泛化容器适配器?
我有以下课程:
以及以下代码:
我想使用一个模板化成员函数来初始化任何适配器类型。到目前为止,它只适用于stack
or queue
,我不知道如何使用模板来概括它。
这是我尝试过的:
编译器说它不能推导出模板参数M
。
c++ - 初始化中模板转换算子类型推导的规则是什么?
考虑这段代码:
标准在哪里为以下行为定义了规则?
为什么(1)不会引起歧义问题(假设也R
可以由它初始化bool
)?我最近写了一个类似问题的答案,但我很好奇为什么(1)在这种情况下不像(2),我也不知道它在标准中的描述。
c++ - 从一个模板类到另一个相关模板类的转换运算符
进行了搜索,但找不到与我的查询匹配的内容,它有点具体,所以就这样吧。
我有一些模板类(Vector2、Vector3 和 Vector4)。尝试定义从 Vector2 到 3 和 4 的转换运算符,以及从 Vector3 到 2 和 4 等的转换运算符。
使用 Visual Studio 2017 给了我这个:
错误 C2833:“运算符 Vector2”不是可识别的运算符或类型
任何和所有的帮助表示赞赏。
谢谢你。
编辑:我的实际来源在类定义后确实有分号。忘了把它们放在我发布的简短版本中。另外,是的,有很多错误,但根据我的经验,它通常是第一个重要的尝试向前声明:
编辑:现在我收到错误 C2988:无法识别的模板声明/定义。可能值得一提的是,这 3 个模板类位于不同的文件中。我最初尝试在一个类中包含一个标题以使类型转换运算符正常工作,这就是造成原始错误的原因。
哦是的。我一定会把这些说清楚。这总是很好的建议。虽然是当地时间 0430... :)
编辑:没关系,我是一个spaz。我不知道我是如何在 Vector 和暗淡数量“Vector 2”!=“Vector2”之间插入一个空格的。前向声明它是。不敢相信我错过了这么简单的事情。孩子们:当你被束缚时不要编码,这很好。
c++ - 模板之间的隐式转换
我不太明白为什么这里的代码不能编译。应该可以像这样调用 dist() :
(无论这可能多么可怕)。这个想法是 GenericVec3 参数被转换运算符隐式转换为 GenericVec2。我在这里找到了这个问题
,但我不太确定它是否可以应用于我的问题(将转换运算符设置为 " friend
" 不起作用)。VS 输出以下错误:
这是我的代码:
提前致谢!
-托马斯
c++ - 使用转换运算符对两个不同类的对象进行相互转换
B 类中定义的转换运算符如何在以下代码中工作?我阅读了与堆栈溢出转换运算符相关的所有其他文章,但找不到关于两个不同类的对象相互转换的任何解释。任何帮助将不胜感激,因为我是 C++ 新手
对于以下代码:
我无法理解转换运算符的工作原理以及如何将值分配给 A 的对象。基本上我无法理解代码流,我想知道幕后,即转换是如何发生的?
c++ - 这些转换中的哪一个应该是模棱两可的?
我有一些如下代码:
GCC 在 [2] 而不是 [1] 处给出错误。Clang 两者都出错,显然 MSVC 两者都没有出错。谁是对的?
c++11 - l 值的转换运算符重载,避免重复代码
我有一个需要与包装类互换使用的包装类。幸运的是,类和包装器是二进制兼容的(通过设计),并且可以轻松执行转换(例如在本例中reinterpret_cast
,或者更简单的示例)。
在某种程度上,为了实现这一点,我需要能够通过operator T()
.
目前代码如下所示:
我可以将这三个转换函数浓缩成一个函数或更少的代码,还是有其他方法?
我可以通过这种方式使其更通用(但对于这个简单案例的代码更长),
最终目标是T
可以与wrapper<T>
.
这与如何删除相似的 const 和非 const 成员函数之间的代码重复非常相似?,但是这种情况更具体,因为 1) 它涉及转换运算符,并且,2) 涉及左值重载。
c++ - 隐式转换运算符不会与运算符重载一起使用
考虑以下示例:
注释行导致编译错误:no match for 'operator+'
. 为什么?我最初的想法是,它首先会operator std::string
用于转换,然后执行对 的调用operator+
,就像它对.append
.
它只是隐式转换的一级,所以应该执行并且应该考虑到它,不是吗?
c++ - 嵌套类中用户定义的转换运算符
为什么以下代码无法编译:
我的 MSVC++ 2017 编译器说:
c++ - C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本
以下代码使用带有 C++17 集的 gcc 7.1.0 编译,但不能使用 C++14 集(或 Visual Studio 2017)编译。在Wandbox上很容易复制。
必须做些什么才能使其与 C++11/14 一起使用?