|
1
3
您发布的代码与 Cameau compiler
正如您所知,一个有效的强制转换只包含一个用户定义的强制转换,因此我考虑的一个可能的解决方案是通过在强制转换模板中定义一个新类型并使用
static assert
没有从新类型到结果类型的强制转换(使用
boost is_convertible
经过几天的深思熟虑后,我突然想到,你可以简单地记下演员接线员的地址。说起来容易做起来难一点,因为C++有一个指向成员语法的毛茸茸的指针(我花了比预期更长的时间才把它弄好)。我不知道这在VS2008上是否有效,我只是在Cameau上检查过。
编辑: 我有机会在VS2005和VS2008上测试它。我的发现与原始海报不同。
|
|
|
2
1
使用标记为 explicit 是如何防止编译器允许隐式转换的类型初始化包装器类的。 |
|
|
3
1
由于与模板相关的编译器错误消息通常很难解释,如果您不介意指定每个转换,那么也可以通过提供默认模板定义,让编译器在失败情况下发出更具指导性的消息。这使用了编译器只会尝试在实际调用的模板中编译代码这一事实。
|
|
4
0
听起来您需要模板专门化,类似这样做:
编辑:如另一篇文章所述,如果执行了不支持的强制转换,您可以在通用版本中添加一些内容,以提供更有用的错误消息。 |
|
|
DutChen18 · 如何在C宏中内联触发隐式指针转换? 1 年前 |
|
|
0xDED · 如何将泛型类强制转换为对象的泛型类? 2 年前 |
|
|
Niclas · 变量>-1如何在C中精确求值? 2 年前 |
|
|
Textime · 将Varchar2转换为时间 2 年前 |
|
|
xpt · Go,无法将类型*int32转换为类型*int64 2 年前 |