如何创建类似于 QVariant 的变体类
How to create a Variant class similar to QVariant
我正在尝试创建一个类似于Qt的QVariant的变体类。我已经考虑过std::variant 和 std::any,但不幸的是,我需要类似于 QVariant::value(( 函数的东西。但是,我找不到一种在不出现以下错误的情况下实现该功能的方法:
note: candidate: template<class T> T Variant::value() const
inline T value() const {
^~~~~
note: template argument deduction/substitution failed:
note: couldn't deduce template parameter ‘T’
这个答案似乎是我想要的,但我试图理解为什么该实现在没有收到返回类型上的"推断模板参数'T'"错误的情况下工作。任何帮助将不胜感激。谢谢。
这是我的.H:
class Variant {
private:
enum VariantType {
CHAR = 0,
UCHAR,
SCHAR,
SHORT,
USHORT,
INT,
UINT,
LONG,
ULONG,
LONGLONG,
ULONGLONG,
BOOL,
FLOAT,
DOUBLE,
LONGDOUBLE
};
public:
explicit Variant(int i);
explicit Variant(double d);
int ToInt() const;
double ToDouble() const;
private:
struct Internal {
Internal(VariantType typeIn) :
type(typeIn) {
}
union {
char c;
unsigned char uc;
short s;
signed char sc;
unsigned short us;
int i;
unsigned int ui;
long l;
unsigned long ul;
long long ll;
unsigned long long ull;
bool b;
float f;
double d;
long double ld;
void *ptr;
} value;
VariantType type;
};
Internal _data;
public:
template<typename T>
inline T value() const {
// try to get int/double working first
if (_data.type == VariantType::DOUBLE) {
return _data.value.d;
} else if (_data.type == VariantType::INT) {
return _data.value.i;
}
}
};
这是我的..CPP:
Variant::Variant(int i) : _data(INT) {
_data.value.i = i;
}
Variant::Variant(double d) : _data(DOUBLE) {
_data.value.d = d;
}
int Variant::ToInt() const {
return _data.value.i;
}
double Variant::ToDouble() const {
return _data.value.d;
}
编辑。
错误来自您的调用站点,而不是类定义。并且错误告诉您Variant::value<T>()
需要一个<T>
,但您没有提供任何用于实例化value<T>
的类型参数。
同样的限制也适用于QtVariant
,它不是你的类所独有的。
相关文章:
- 类似于strcat()的函数出现问题
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 算术运算的结果类似于:C浮点变量中的1/3
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 创建类似于布尔值的变量类型
- 如何在 Arduino 字符串的开头添加元素.类似于 JS unshift();
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何创建类似于 QVariant 的变体类
- 对于多个字符(如 ETX/STX 对),是否有类似于 std::quote 的东西
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 有没有类似于stoi的函数可以用于模板类
- 如何编写一个类似于kernellist_head的c++风格的双链表实现
- 序列化模式类似于boost::序列化
- 构造一个类似于JSON文件c++的字符串
- 多重继承中的派生类的行为类似于聚合
- 如何使更安全的C++变体访问者,类似于切换语句?
- C++ Python 中是否有类似于 help() 的函数
- 是否可以为成员的方法编写类似于固有方法的 using 声明?