c++ - 如何使用模板将 QString 转换为类型名?

标签 c++ qt templates

我想编写一个通用的模板方法来计算一些东西并最终返回一个 typename T 的值。该值来自 QString,因此我需要将 QString 转换为指定的 typename T。不幸的是,我只找到了 toDouble()toInt() 等方法。

我需要的是:

QString s = 3.1415;
double d = s.toType<double>();
float f = s.toType<float>();
int i = s.toType<int>();

我不想调用 toDouble()toInt(),...因为我无法在编译时选择它们。

谢谢!


编辑:我可以编写我自己的专用模板函数来执行此操作。所以

double myOwnConvertFunction<double>(const QString& s)

然后会简单地调用 s.toDouble()

我认为 Qt 可能已经有一个内置的方式?

最佳答案

您可以转换 QStringQVariant然后使用 value<T>()

QVariant(s).value<T>()

QVariantQString 共享数据,所以这里没有发生深度复制,结果也应该很快。为了更加舒适,Qt 有

qvariant_cast<T>(s)

关于c++ - 如何使用模板将 QString 转换为类型名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33501139/

相关文章:

c++ - 返回可变大小的位集

c++ - 如何用字符串文字优雅地初始化 vector<char *>?

c++ - Qt中两个线程之间的事件同步

c++ - QAbstractListModel 的子类只能作为 QML 中的父类(super class)使用

c++ - 预处理器定义在 Visual Studio 中有效,在 Qt-creator 中无效

c++ - 表达式模板玩具示例 : user-defined cast not applied for complex types

c++ - 为什么我需要一个前向迭代器来实现我定制的 std::search

c++ - win32(全屏)无边框窗口重叠任务栏

java - 有什么方法可以通过 JNI 获取指向 Java 数组的直接指针吗?

模板类型的 C++ 运行时决策