将qstring转换为其他类型
Convert QStrings to other types
我想将qstring转换为不同的类型。我希望尽可能通用和简单地做到这一点,而不必为每种类型编写显式方法。
我想使用一个模板函数,像这样:
template<typename T>
void getValueFromString(QString str, T& returnVal)
{
returnVal = static_cast<T>(str);
}
显然这不起作用,但是我想要这样的东西。
有简单的方法吗?
QString有很多转换方法,您可能不需要新的函数,例如:
QString str = "FF";
bool ok;
int hex = str.toInt(&ok, 16); // hex == 255, ok == true
int dec = str.toInt(&ok, 10); // dec == 0, ok == false
我不确定是否可以从QString
继承,但您可以从中创建一个孩子并覆盖强制转换。您可以重写类的强制转换,例如:
class Circle
{
public:
Circle(int radius) : radius(radius) {}
operator int() const { return radius; }
private:
int radius;
};
int x = static_cast<int>(aCircle);
同样,为QString
重写static_cast
看起来不符合逻辑。
您可以使用stream:
template<typename T>
void getValueFromString(QString str, T& returnVal)
{
QTextStream stream(str);
stream >> returnVal;
}
此外,您可以使用Qt的元对象系统,它可以很好地处理自定义类型。
struct MyStruct
{
int i;
...
};
Q_DECLARE_METATYPE(MyStruct)
...
MyStruct s;
QVariant var;
var.setValue(s); // copy s into the variant
...
// retrieve the value
MyStruct s2 = var.value<MyStruct>();
注意,QVariant
可以很容易地转换为QString
。
如果Boost是一个选项,你可以这样写:
#include <boost/lexical_cast.hpp>
template<typename T>
void getValueFromString(QString str, T& returnVal)
{
returnVal = boost::lexical_cast<T>(str.toStdString());
}
引用:
-
toStdString()
- Boost
lexical_cast<>
相关文章:
- 泛型枚举和其他类型的重载模板函数
- 将结构时间规范添加到类(似乎没有其他类型的)会导致EXEC_BAD_ACCESS
- 严格的别名是否会阻止您通过其他类型写入 char 数组?
- 使用字节向量作为其他类型的原始存储是一种好的做法吗
- 区分键盘记录器中的密码和其他类型的键盘输入
- 对于其他类型的void_t,是否有标准的概括
- 如何根据枚举参数返回其他类型
- 扣除其他类型的依赖类型
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- 重载流<<运算符,用于指针/共享指针和其他类型的
- 如何有效地将底层数据从 std::string 移动到其他类型的变量?
- 如何使用 std::shared_ptr<void> 和其他类型的 std::shared_ptr 进行函数重载?
- 是否有类型特征显示一种类型是否可能包含其他类型的值
- static_cast到其他类型,然后移动结果
- 是其他类型的不同类型的初始化衍生物,或者它们是完全分开的
- 我如何创建一种类型,就像其他类型一样
- 在模板类中,如何使用其他类型名称定义函数
- 如果 JVM 的参数是从其他类型的转换而来的,JNI 找不到该类
- 是否有预处理器宏可以让我知道应用程序是控制台类型还是其他类型
- C++ 将部分数组(在某些偏移量)转换为其他类型