链接隐式转换操作符
Chaining implicit conversion operators
我有一个类,我需要隐式转换为一些东西,中间值,例如
struct outer {
struct inner {
operator T() { return T(); }
};
operator inner() { return inner(); }
};
如果我有这个结构,是否总是有效,例如
void f(T t);
outer o;
f(o);
§13.3.3.1.2 [over.ics.user] p1
一个用户定义的转换序列由一个初始标准转换序列后面跟着、一个用户定义的转换(12.3)后面跟着第二个标准转换序列组成。
注意单数和"sequence"这个词的缺失。在隐式转换序列中,只考虑一个用户定义的转换。
这行得通:
struct Foo {}; // renamed T in Foo to avoid confusion!
struct outer {
struct inner {
operator Foo() { return Foo(); }
};
operator inner() { return inner(); }
template <typename T>
operator T () {
return operator inner();
}
};
int main() {
void f(Foo t);
outer o;
f(o);
}
但仅仅因为f
没有过载,所以它不是一个真正的解决方案。
相关文章:
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- Clang vs GCC vs MSVC模板转换操作符-哪个编译器是正确的
- 为什么操作符的新函数需要强制转换
- c++中从整数到字符串的转换中,左移操作符是做什么的?
- 模板类型转换操作符=
- 链接隐式转换操作符
- 强制转换操作符函数在g++中可以很好地编译,但在其他编译器中不行.为什么
- 当目标类有多个构造函数时,消除强制转换操作符的歧义
- 删除转换操作符
- 强制转换操作符重载和引用
- 实现没有临时的转换操作符
- 不同的强制转换操作符被不同的编译器调用
- 将操作符转换为模板实参的特化
- 为什么模板化的用户定义转换操作符能够确定其返回类型?
- const转换操作符
- 在可强制转换为另一个模板类型的类模板中重载赋值操作符
- 调用转换操作符不能用于静态const变量
- 内部编译器错误-开关表达式中的模板化转换操作符
- 强制转换操作符可以是显式的吗?
- 在返回语句中统一初始化,并显式将操作符转换为bool