Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Qt和template交换endianess_C++_Qt_Templates_Endianness_Template Specialization - Fatal编程技术网

C++ 使用Qt和template交换endianess

C++ 使用Qt和template交换endianess,c++,qt,templates,endianness,template-specialization,C++,Qt,Templates,Endianness,Template Specialization,我使用Qt交换endianess,同时逐字段读取缓冲区并将结果放入数据结构中 由于结构的字段既是整数类型又是浮点类型,所以我尝试使用模板和模板专门化,但我的代码没有编译 模板专门化的原因是避免为浮点类型调用Qt工具,因为它们不是为此类类型定义的(因为endianess是一个仅限整数的问题)。但编译器抱怨说,我仍然在为float调用qFromBigEndian函数 代码如下: class Iterator { public: inline Iterator(con

我使用Qt交换endianess,同时逐字段读取缓冲区并将结果放入数据结构中

由于结构的字段既是整数类型又是浮点类型,所以我尝试使用模板模板专门化,但我的代码没有编译

模板专门化的原因是避免为浮点类型调用Qt工具,因为它们不是为此类类型定义的(因为endianess是一个仅限整数的问题)。但编译器抱怨说,我仍然在为
float
调用
qFromBigEndian
函数

代码如下:

class Iterator
    {
    public:

        inline Iterator(const char * buffer)   :
            _it(buffer)
        {}

        template <typename T>
        inline void readNext(T & field)
        {
            field = qFromBigEndian(*reinterpret_cast<const T *>(_it));
            _it += sizeof(T);
        }

        template <>
        inline void readNext<float>(float & field)
        {
            field = *reinterpret_cast<const float *>(_it);
            _it += sizeof(float);
        }

        template <>
        inline void readNext<double>(double & field)
        {
            field = *reinterpret_cast<const double *>(_it);
            _it += sizeof(double);
        }

    private:

        const char * _it;
    };
类迭代器 { 公众: 内联迭代器(常量字符*缓冲区): _it(缓冲区) {} 样板 内联void readNext(T字段和字段) { 字段=qFromBigEndian(*重新解释强制转换(_it)); _it+=sizeof(T); } 样板 内联void readNext(浮动和字段) { 字段=*重新解释强制转换(\u it); _it+=sizeof(浮动); } 样板 内联void readNext(双字段(&F) { 字段=*重新解释强制转换(\u it); _it+=sizeof(双倍); } 私人: 常量字符*_it; };
看起来您正在尝试做一些已经做过的事情。简单的使用,很好的提示。我正在尝试使用QDataStream,但不幸的是它不起作用:在浮点字段上出现了中断。我应该发布另一个问题来解释…更仔细地阅读文档。检查:我已经读过这个方法,但我只是不想切换浮点精度,因为有些字段是双精度的,有些是浮点数,这可能会改变。我想在operator>>中对其进行模板化,但看起来不是。请重新阅读!设置版本
Qt_4_5
,它将根据需要工作一次,对于
float
为32位,对于
double
为64位。