这是一个简单的例子,我们可以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
主要是一个类模板因此,
问题是它无法推断出数组类型存储,因为它只需要数据布局/表示?
请参考此FASTLZ.C源代码.
我认为它的意图是两个定义的关于它们的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 ++标准功能,这些功能包括:
我无法弄清楚它们在哪些情况下比另一种情况更适用和有用。
我试图创建一个类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++并发编程.我想知道如何通过我的C++程序访问功能性图形卡芯片和声卡芯片.还有另一种方法连接各自的驱动程序和我的应用程序,而无需使用外部库,如OpenGL, OpenAL等.您可以通过示例简要描述解决方案.谢谢.