草庐IT

pseudo-typedef

全部标签

c++ - "pseudo-atomic"C++ 操作

所以我知道在C++中没有什么是原子的。但我试图弄清楚是否有任何我可以做出的“伪原子”假设。原因是我想避免在一些我只需要非常弱的保证的简单情况下使用互斥锁。1)假设我已经全局定义了volatileboolb,它最初我设置为true。然后我启动一个执行循环的线程while(b)doSomething();同时,在另一个线程中,我执行b=true。我可以假设第一个线程会继续执行吗?换句话说,如果b开始时为真,并且第一个线程在第二个线程分配b=true的同时检查b的值,我是否可以假设第一个线程将b的值读取为真?或者是否有可能在赋值b=true的某个中间点,b的值可能被读取为false?2)现在

c++ - "pseudo-atomic"C++ 操作

所以我知道在C++中没有什么是原子的。但我试图弄清楚是否有任何我可以做出的“伪原子”假设。原因是我想避免在一些我只需要非常弱的保证的简单情况下使用互斥锁。1)假设我已经全局定义了volatileboolb,它最初我设置为true。然后我启动一个执行循环的线程while(b)doSomething();同时,在另一个线程中,我执行b=true。我可以假设第一个线程会继续执行吗?换句话说,如果b开始时为真,并且第一个线程在第二个线程分配b=true的同时检查b的值,我是否可以假设第一个线程将b的值读取为真?或者是否有可能在赋值b=true的某个中间点,b的值可能被读取为false?2)现在

c++ - 在编译时检测 typedef(模板元编程)

我目前正在做一些模板元编程。就我而言,我可以处理任何“可迭代”类型,即typedeffooconst_iterator以相同方式存在的任何类型。我试图为此使用新的C++11模板元编程,但是我找不到检测某个类型是否丢失的方法。因为我还需要根据其他特征打开/关闭其他模板特化,所以我目前正在使用带有两个参数的模板,第二个是通过std::enable_if生成的。这是我目前正在做的事情:templatestructFoo{};//defaultcaseisinvalidtemplatestructFoo::value>::type>{voiddo_stuff(){...}};templates

c++ - 在编译时检测 typedef(模板元编程)

我目前正在做一些模板元编程。就我而言,我可以处理任何“可迭代”类型,即typedeffooconst_iterator以相同方式存在的任何类型。我试图为此使用新的C++11模板元编程,但是我找不到检测某个类型是否丢失的方法。因为我还需要根据其他特征打开/关闭其他模板特化,所以我目前正在使用带有两个参数的模板,第二个是通过std::enable_if生成的。这是我目前正在做的事情:templatestructFoo{};//defaultcaseisinvalidtemplatestructFoo::value>::type>{voiddo_stuff(){...}};templates

c++ - 从实例访问 typedef

和STL容器一样,为什么我们不能从类实例访问类内部的typedef?对此有什么特别的见解吗?当value_type是模板参数时,如果不需要像vector::value_type那样指定模板参数,它可以帮助编写更通用的代码例子:classT{public:typedefintvalue_type;value_typei;};Tt;T::value_typei;//okt.value_typei;//won'twork 最佳答案 答案是先使用decltype获取类。例如,decltype(t)::value_type需要C++11。引用

c++ - 从实例访问 typedef

和STL容器一样,为什么我们不能从类实例访问类内部的typedef?对此有什么特别的见解吗?当value_type是模板参数时,如果不需要像vector::value_type那样指定模板参数,它可以帮助编写更通用的代码例子:classT{public:typedefintvalue_type;value_typei;};Tt;T::value_typei;//okt.value_typei;//won'twork 最佳答案 答案是先使用decltype获取类。例如,decltype(t)::value_type需要C++11。引用

c++ - 在 typedef 上使用 sizeof 而不是局部变量

就像这个例子一样(在C中):typedefinttype;intmain(){chartype;printf("sizeof(type)==%zu\n",sizeof(type));//Outputs1}输出总是局部变量type的大小。当C++不再需要在每次使用结构之前编写struct时,它仍然保留了struct{type}语法并引入了别名(class{type})以显式引用结构或类。示例(在C++中):structtype{intm;};intmain(){chartype;printf("sizeof(type)==%u\n",sizeof(type));//Outputs1pri

c++ - 在 typedef 上使用 sizeof 而不是局部变量

就像这个例子一样(在C中):typedefinttype;intmain(){chartype;printf("sizeof(type)==%zu\n",sizeof(type));//Outputs1}输出总是局部变量type的大小。当C++不再需要在每次使用结构之前编写struct时,它仍然保留了struct{type}语法并引入了别名(class{type})以显式引用结构或类。示例(在C++中):structtype{intm;};intmain(){chartype;printf("sizeof(type)==%u\n",sizeof(type));//Outputs1pri

c++ - typedef'ing enum 不会使 enum-values 可见

我有一个类,其中有一个枚举,定义如下:classX{public:enumDirection{DIR_LEFT,DIR_RIGHT};};现在我希望在另一个类中重用这个枚举,如下所示:classY{public:typedefX::DirectionDirection;};正如预期的那样,使用Y::Direction可以正常工作,例如:voidmyFunction(Y::Directiondir){}但枚举中的值似乎没有与typedef一起“复制”。如果我编写以下内容,则会出现编译错误:myFunction(Y::DIR_LEFT);相反,我不得不再次引用枚举的原始位置,像这样:myF

c++ - typedef'ing enum 不会使 enum-values 可见

我有一个类,其中有一个枚举,定义如下:classX{public:enumDirection{DIR_LEFT,DIR_RIGHT};};现在我希望在另一个类中重用这个枚举,如下所示:classY{public:typedefX::DirectionDirection;};正如预期的那样,使用Y::Direction可以正常工作,例如:voidmyFunction(Y::Directiondir){}但枚举中的值似乎没有与typedef一起“复制”。如果我编写以下内容,则会出现编译错误:myFunction(Y::DIR_LEFT);相反,我不得不再次引用枚举的原始位置,像这样:myF