如何在预期类型更改时获取编译器错误
How to get a compiler error when expected type changes
我的应用程序中有一些简化形式的代码:
QVariantMap deviceMap;
deviceMap.insert("Model", pDevice->Type());
QJsonDocument jsonDoc = QJsonDocument::fromVariant(deviceMap);
QString str = jsonDoc.toJson(QJsonDocument::Compact);
我刚刚发现了一个错误,有人将功能Type()
从:
QString Type() const;
自:
int Type() const;
显然,Qt对此很好,只是将其转换为导致错误的JSON。但是当像这样更改类型时,我宁愿收到编译器错误。如果将来函数的返回发生变化,我如何更改此设置,以便出现编译器错误?
最简单的
解决方法是在代码中包含返回值 Type()
的static_assert
。 但是,当然,您不想在任何地方都这样做。
static_assert( std::is_same<decltype(pDevice->Type()), QString>::value,
"Type mismatch, expected QString" );
deviceMap.insert("Model", pDevice->Type());
您可以使用独立函数:
void insertModel(QVariantMap& deviceMap, const QString& str)
{
deviceMap.insert("Model", str);
}
insertModel(deviceMap, pDevice->Type());
或更通用:
void insertString(QVariantMap& deviceMap, const char* key, const QString& str)
{
deviceMap.insert(key, str);
}
insertString(deviceMap, "Model", pDevice->Type());
在这两种情况下,只要Type()
返回 QString 或任何可以转换为 QString 的内容,代码就会起作用。你也可以static_assert Type(( 返回 QString。
相关文章:
- 有没有办法在从编译器获取参数时避免预处理器宏?
- C ++编译器如何获取argv字符串的长度
- 如何在C++中获取真实值精度 与Fortran相同(Pararel Studio XE编译器)
- 如何在编译器时动态获取元组内的变量类型C++?
- (如何)获取有关某个 C++Year 的已弃用/不推荐的功能/构造的编译器警告
- 如何在何处获取 MSVS 2008(32 位)编译器工具链的编译器,而无需安装 MSVS2008
- 如何在预期类型更改时获取编译器错误
- 如何获取C编译器#Error如果大小(struct ..)不等于给定的数字
- 获取运行时使用的编译器
- 编译器不喜欢我的类C++。获取未声明的标识符错误等
- 当试图检测基类是否具有虚拟破坏者时,如何获取正确的编译器错误消息
- 如何获取指向编译器选择的重载函数的函数指针
- 为什么获取/设置Auto_Ptr会导致此编译器错误
- 从已编译的可执行文件中获取编译器选项
- 尝试使用 Qt5、OpenCV 2.4.9 和 VC2013 编译器制作项目时获取LNK1104
- 在 Scala 2.9.3 编译器的擦除阶段之后获取具体类型的符号
- 获取数组的长度.编译器错误
- CMake:如何获取编译器"system"标志?
- 在 MinGW g++ 编译器中获取"tlhelp32.h"的编译错误
- 从程序中获取编译器选项