草庐IT

safe-publication

全部标签

c++ - 有没有希望有效地调用 std::variant 上的公共(public)基类方法?

方式std::variant当std::visit时分派(dispatch)到不同的访问者方法当变体替代品是完全不同的类型时,被调用是非常合理的。本质上是特定于访问者的vtable在编译时构建,经过一些错误检查1,通过基于当前index()索引表来查找适当的访问者函数。在大多数平台上解析为间接跳转之类的东西。但是,如果替代方案共享一个公共(public)基类,则调用(非虚拟)成员函数或使用访问者访问基类上的状态在概念上要简单得多:您总是调用相同的方法,并且通常使用相同的指针2基类。尽管如此,实现最终还是一样缓慢。例如:#includestructBase{intm_base;intge

c++ - 公共(public) "using"= decltype(<private>)

在以下(最小化)代码中,我有一个公共(public)using引用decltype(something_private)的声明:usingFoo=decltype(something_private).在Clang而不是GCC上,由于它是私有(private)的,因此无法编译。问题:如果我不想制作func(),有什么优雅的解决方案?上市。在C++标准(C++11)中,备份Clang在这里是正确的吗?以下代码在Clang(3.9-7.0)上失败并出现以下错误代码,但在GCC(4.8.4-8.2)上构建:classA{private:templatestaticautofunc()->T;

c++ - 公共(public) "using"= decltype(<private>)

在以下(最小化)代码中,我有一个公共(public)using引用decltype(something_private)的声明:usingFoo=decltype(something_private).在Clang而不是GCC上,由于它是私有(private)的,因此无法编译。问题:如果我不想制作func(),有什么优雅的解决方案?上市。在C++标准(C++11)中,备份Clang在这里是正确的吗?以下代码在Clang(3.9-7.0)上失败并出现以下错误代码,但在GCC(4.8.4-8.2)上构建:classA{private:templatestaticautofunc()->T;

c++ - 公共(public)继承的静态断言

我构建了一个帮助类,它将通过模板构造一个自定义类,这个自定义类必须继承自某个类,我可以使用std::is_base_of进行检查。但是我还需要检查继承是否公开,如何实现?作为引用,这里是该类的精简版本,我在其中有std::is_base_of。templateclassSink{static_assert(std::is_base_of::value,"CustomSinkmustderivefromBaseSink");//SomestaticassertheretocheckifcustomsinkhaspubliclyinheritedBaseSink//static_asser

c++ - 公共(public)继承的静态断言

我构建了一个帮助类,它将通过模板构造一个自定义类,这个自定义类必须继承自某个类,我可以使用std::is_base_of进行检查。但是我还需要检查继承是否公开,如何实现?作为引用,这里是该类的精简版本,我在其中有std::is_base_of。templateclassSink{static_assert(std::is_base_of::value,"CustomSinkmustderivefromBaseSink");//SomestaticassertheretocheckifcustomsinkhaspubliclyinheritedBaseSink//static_asser

c++ - 在 C++11 中, protected 意味着公共(public)?

继续在C++error:basefunctionisprotected中学到的东西...C++11指向成员的指针规则有效地去除了任何值的protected关键字,因为可以在不相关的类中访问protected成员,而无需任何邪恶/不安全的强制转换。也就是说:classEncapsulator{protected:inti;public:Encapsulator(intv):i(v){}};Encapsulatorf(intx){returnx+2;}#includeintmain(void){Encapsulatore=f(7);//forbidden:std::couthttp://i

c++ - 在 C++11 中, protected 意味着公共(public)?

继续在C++error:basefunctionisprotected中学到的东西...C++11指向成员的指针规则有效地去除了任何值的protected关键字,因为可以在不相关的类中访问protected成员,而无需任何邪恶/不安全的强制转换。也就是说:classEncapsulator{protected:inti;public:Encapsulator(intv):i(v){}};Encapsulatorf(intx){returnx+2;}#includeintmain(void){Encapsulatore=f(7);//forbidden:std::couthttp://i

c++ - 是否允许实现将公共(public)成员添加到标准类型?

是否允许C++标准库实现将公共(public)(和protected)成员添加到标准类型的接口(interface)?N379717.6.5.5[member.functions]/2说:Animplementationmaydeclareadditionalnon-virtualmemberfunctionsignatureswithinaclass:—byaddingargumentswithdefaultvaluestoamemberfunctionsignature;[Note:Animplementationmaynotaddargumentswithdefaultvalue

c++ - 是否允许实现将公共(public)成员添加到标准类型?

是否允许C++标准库实现将公共(public)(和protected)成员添加到标准类型的接口(interface)?N379717.6.5.5[member.functions]/2说:Animplementationmaydeclareadditionalnon-virtualmemberfunctionsignatureswithinaclass:—byaddingargumentswithdefaultvaluestoamemberfunctionsignature;[Note:Animplementationmaynotaddargumentswithdefaultvalue

c++ - 需要一些关于如何制作类(class)的反馈 "thread-safe"

我目前正在学习如何在C++中进行多线程处理。我的一个学习项目是俄罗斯方block游戏。在这个项目中,我有一个包含所有游戏状态数据的Game类。它有移动方block的方法和其他一些东西。用户将访问此对象(用户将使用箭头键从主线程移动block),同时线程计时器正在对事件block执行重力(定期降低它)。起初我认为我可以通过添加互斥成员变量并将其锁定在每个方法调用中来使Game类线程安全。但问题在于它只保护单个方法调用,而不是涉及多个方法调用的更改。例如://Thisisnotthread-safe.while(!game.isGameOver()){game.dropCurrentBlo