小编Bud*_*nga的帖子

为什么std :: variant在union可以不能保存数组对象类型?

这是一个简单的例子,我们可以union像这样定义一个低级别:

static union
{
    uint64_t a;
    uint8_t b[8];
};
Run Code Online (Sandbox Code Playgroud)

但是我们不能这样声明std::variant(请不要关心语法,如果我错了就纠正我!,只是抓住这个想法)

std::variant<uint64_t, uint8_t[8]> v
Run Code Online (Sandbox Code Playgroud)

cppReference明确指出,

模板参数

类型 - 可以存储在此变体中的类型.所有类型必须是(可能是cv限定的)非数组对象类型

此外,MSVC-v141(C++ 17)编译器给出了编译错误:

错误C2338变体要求所有Ts都是非数组对象类型([variant.variant]/2).


std::variant主要是一个类模板因此, 问题是它无法推断出数组类型存储,因为它只需要数据布局/表示

c++ variant visual-c++ c++17 c++20

11
推荐指数
1
解决办法
892
查看次数

自我背后的理论和用法是什么,包括C和C++中的源文件?

请参考此FASTLZ.C源代码.

  • 在第113行和第128行,它包含了自己的源文件.

我认为它的意图是两个定义的关于它们的FASTLZ_LEVEL宏值的函数名称.

#define FASTLZ_COMPRESSOR fastlz1_compress
#define FASTLZ_DECOMPRESSOR fastlz1_decompress
static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void* input, int length, void* output);
static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void* input, int length, void* output, int maxout);
#include "fastlz.c"
Run Code Online (Sandbox Code Playgroud)

#define FASTLZ_COMPRESSOR fastlz2_compress
#define FASTLZ_DECOMPRESSOR fastlz2_decompress
static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void* input, int length, void* output);
static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void* input, int length, void* output, int maxout);
#include "fastlz.c"
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚C语言中这个宏背后的理论或关键特性,有人可以简单解释一下这个场景吗?

c c++ gcc clang visual-c++

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

我们在哪里可以在std :: latch上使用std :: barrier?

我最近听说了新的c ++标准功能,这些功能包括:

  1. std :: latch
  2. std :: barrier

我无法弄清楚它们在哪些情况下比另一种情况更适用和有用。

  • 如果有人可以举一个如何明智地使用每个人的榜样,那将真的很有帮助。

c++ std visual-c++ c++-experimental

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

如何在C ++中正确创建线程类的子类(std :: thread的子类)

我试图创建一个类Parallel是的子类std::thread,所以我的类中定义Parallel.h的,但在不同的文件中定义的主要方法main.cpp。当我创建的实例在同一个项目(在Visual Studio)Parallel和执行join()的功能main()如下方法代码段:我是C ++的新手,这里是“ Parallel.h”-

#include<thread>
using namespace std;
namespace Para{
class Parallel:thread
{
public:

    static void run(){

    }
    Parallel(void)
    {
    }

    virtual ~Parallel(void)
    {
    }

    inline static void start(Parallel* p){
                // (*p).join();
    }

    virtual void Parallel::start(thread& t){

    }
    static void parallelize(Parallel& p1,Parallel& p2){

    }
    inline virtual Parallel* operator=(thread* t){
        return  static_cast<Parallel*>(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

//在main.cpp中

void main(){

    Parallel p;
    p.join();
    thread t(print);
     t.join();
     system("Pause");

}
Run Code Online (Sandbox Code Playgroud)

问题是如何定义一个线程类的适当子类,该线程类具有以函数名作为参数的重载构造函数,并且当定义的p.join() …

c++ multithreading c++11 visual-studio-2012

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

IDA和x64dbg之间的主要区别是什么?

IDA pro,x64Dbgolldbgwindbg用于逆向工程(作为Dissembler)和调试。

  • 它们之间的主要区别是什么?什么时候使用每个?

windbg reverse-engineering ida ollydbg

3
推荐指数
1
解决办法
5766
查看次数

如何直接从C++访问GPU和SoundCard芯片的功能?

我是学生,学习C++并发编程.我想知道如何通过我的C++程序访问功能性图形卡芯片和声卡芯片.还有另一种方法连接各自的驱动程序和我的应用程序,而无需使用外部库,如OpenGL, OpenAL等.您可以通过示例简要描述解决方案.谢谢.

c++ c++11

0
推荐指数
1
解决办法
308
查看次数