小编Vio*_*ffe的帖子

5
推荐指数
2
解决办法
3278
查看次数

从QByteArray删除第一个字节

我想编写一个将QByteArray输入到该函数的函数。我想从接收数据中删除一些标头,并将其存储到全局QByteArray中。

void abc::CopyData(const QByteArray &data)
{
    switch(RequestPacketCount)
    {
        case REQUEST_FIRST_PACKET:
        {
            ByteArrayData = data;
        }
            break;
        case REQUEST_SECOND_PACKET:
        case REQUEST_THIRD_PACKET:
            ByteArrayData.append(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

我要删除“ n”号。从“数据”开始的字节数,并将剩余数据存储到“ ByteArrayData”

提前致谢。

qt qbytearray

5
推荐指数
1
解决办法
1万
查看次数

如何在Linux(GCC)中打印到输出(而不是stdout)?

在Windows上有OutputDebugString函数,我如何在Linux上做同样的事情?

更新:stderr和stdlog不是我想要的.那些被重定向到stdout.PS并syslog没有什么不同.

c++ linux

4
推荐指数
2
解决办法
3959
查看次数

以编程方式在QListWidget中选择多个项目

可以选择单个项目/行,但我想设置多个项目(窗口小部件配置为允许).可能吗?

c++ qt qlistwidget

4
推荐指数
1
解决办法
3718
查看次数

QString的内置64位哈希函数?

qHash(const QString&)返回uint,这是32位。在32位系统上,是否有任何标准的Qt方法获取字符串的64位哈希?还是我必须自己实现哈希函数?

c++ hash qt qhash

4
推荐指数
1
解决办法
3350
查看次数

在预处理阶段,__LINE__扩展了哪一点?

我在头文件中有一个函数:

template <int line>
inline void log() {}
Run Code Online (Sandbox Code Playgroud)

然后我尝试这个技巧,使它更容易使用:

#define LOG_LINE log<__LINE__>()

然后在.cpp文件中我做:

void main()
{
    LOG_LINE;
}
Run Code Online (Sandbox Code Playgroud)

似乎它按照我喜欢的方式工作.我从.cpp文件获取行,而不是LOG_LINE在.h文件中声明的行.但我不明白它是如何工作的.C++是否会通过双重预处理,留下特殊的宏,如__LINE__第二遍?这是便携式(标准)行为吗?我是否应该期望这适用于所有主要的C++编译器?到目前为止我只尝试过MSVC.

c++ c-preprocessor

4
推荐指数
1
解决办法
148
查看次数

对于模板类Foo方法的参数,"Foo&"和"Foo <T>&"是一样的吗?

考虑上课

template <typename T>
struct Foo {
   Foo(const Foo<T>& other) {}
};
Run Code Online (Sandbox Code Playgroud)

对于构造函数参数类型,是const Foo<T>&const Foo&在这种情况下一样吗?我总是假设没有,认为后者可以被召唤Foo<int> f = Foo<float>(),而前者则不能.但现在我不确定是不是这样.

c++ templates

4
推荐指数
2
解决办法
86
查看次数

递归计算变量模板值

这就是我在努力工作(并且失败).这个想法count<N>必须等于N.这是一个更复杂的计算的简化情况,不介意这个代码的明显愚蠢.

template <>
constexpr size_t count<0> = 0;

template <auto N>
constexpr size_t count = 1 + count<static_cast<size_t>(N) - 1>;

int main()
{
    return count<1>;
}
Run Code Online (Sandbox Code Playgroud)

它不编译:

<source>:5:23: error: expected initializer before '<' token

 constexpr size_t count<0> = 0;
                       ^
Run Code Online (Sandbox Code Playgroud)

如果我将一般情况与特殊化交换,它也不会编译.它甚至可以用变量模板吗?

在线尝试

c++ templates c++14 c++17

4
推荐指数
1
解决办法
132
查看次数

我可以用“using”声明类型 [[nodiscard]] 吗?

您可以使用该属性声明一个类[[nodiscard]]。当您从此类的语义中知道每当它从函数返回时,它必须用于某些用途时,它可能会很有用。[[nodiscard]]我正是遇到这种情况,用它来标记类而不是返回它的每个单独的函数会非常方便。然而,有一个复杂的问题。这是我需要制作的类型[[nodiscard]]

using ConnectionStruct = std::pair<std::shared_ptr<CMutex>, std::shared_ptr<SignalFunction>>;
Run Code Online (Sandbox Code Playgroud)

是否有语法将 my 标记ConnectionStruct[[nodiscard]]

c++ c++17 nodiscard

4
推荐指数
1
解决办法
485
查看次数

为什么 std::vector&lt;int&gt;::iterator 不是连续迭代器?

根据标准,如此处引用的应该vector<T>::iterator是连续的(T除了bool),但在所有 3 个主要实现中它不是连续的,为什么?

#include <iterator>
#include <vector>

using InputIterator = std::vector<int>::iterator;
static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::random_access_iterator_tag>);
static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::contiguous_iterator_tag>);
Run Code Online (Sandbox Code Playgroud)

第一个static_assert成功了,但第二个在最新的 MSVC、GCC 和 clang 中失败了。

https://godbolt.org/z/oG1x1xdda

c++ iterator c++20

4
推荐指数
1
解决办法
173
查看次数