草庐IT

static_switch

全部标签

c++ - static_pointer_cast<Derived> pReallyABase = static_pointer_cast<Derived>(pBase) 有效!为什么?

这个问题在这里已经有了答案:Downcastingusingthe'static_cast'inC++(3个答案)关闭8年前。我不明白为什么会这样。pReallyABase是一个向下转换的shared_pointer,它指向一个基类实例。我理解为什么编译器让我调用pReallyABase->onlyForDerived()因为我将它定义为派生类指针,但是当我尝试使用该指针调用派生类函数时为什么没有出现运行时错误?classBase{public:virtualstringwhatAmI(){return"IamaBase";}};classDerived:publicBase{publ

【译】稀疏混合专家模型的崛起: Switch Transformers

原作: 塞缪尔·弗兰德引言:为最强大的语言模型铺平道路的核心技术 使用Dall-E生成的图像稀疏混合专家模型(MoE)已成为最新一代LLMs的核心技术,例如OpenAI的GPT-4、MistralAI的Mixtral-8x7等。简而言之,稀疏MoE是一种非常强大的技术,因为理论上,它允许我们以O(1)的计算复杂度扩展任何模型的容量!然而,正如通常的情况一样,问题在于细节,要让稀疏的MoE正常工作就需要确保这些细节完全正确。在本文中,我们将深入探讨稀疏MoE领域的一个核心贡献,即SwitchTransformer(Fedus等人,2022年),它首次展示了利用这项技术实现了令人印象深刻的扩展特性

c++ - 索引上的 static_assert 在编译时知道

有没有办法静态断言编译时已知的索引,否则在运行时断言?示例:templateclassFoo{T_data[Dim];public:constT&operator[](intidx)const{static_assert(idxfoo;foo[0];foo[1];foo[2];//compilererrorfor(inti=0;i1}return0;} 最佳答案 您可以简单地抛出异常或断言。它将在constexpr上下文中编译失败。这仅在可以在constexpr上下文中评估抛出条件时才有效。请注意,某些版本的gcc中有一个错误会阻止

c++ - 为什么 GCC 不允许我创建 `inline static std::stringstream` ?

我会直接去MCVE:#includestructA{inlinestaticstd::stringstreamss;};海湾合作委员会7.2和7.1refusetocompile它有以下错误:error:nomatchingfunctionforcallto'std::__cxx11::basic_stringstream::basic_stringstream()'inlinestaticstd::stringstreamss;^~Infileincludedfromblah:1:0:/opt/compiler-explorer/gcc-7.2.0/include/c++/7.2.0

显式类型转换(C 风格转换)的 C++ 转换符号和 static_cast 的多种解释

Paragraph4of[expr.cast](在撰写本文时可用的最新C++标准草案中)描述了C样式转换的行为如下:Theconversionsperformedbyaconst_­cast,astatic_­cast,astatic_­castfollowedbyaconst_­cast,areinterpret_­cast,orareinterpret_­castfollowedbyaconst_­cast,canbeperformedusingthecastnotationofexplicittypeconversion.Thesamesemanticrestrictionsan

c++ - boost static_vector 而不是 std::is_trivially_destructible

根据thisexample(左例)#include#includestructX{intk;std::arraya;boost::container::static_vectorb;~X()=default;};inthuh(){std::arrayx;return0;}看起来像boost::container::static_vector当T时可以轻易破坏是(当b被销毁时,不会在X上循环)。huh优化为xoreax,eax;ret(即return0不遍历数组。当我改用具有非平凡析构函数的包含类型时(右例)#include#includestructY{~Y();};structX{i

如何替换&lt; switch&gt;&&lt;外国对象&gt;在SVG文件中?

我正在开发一个Android应用程序,并希望实现可绘制的向量。当我导入时,在AndroidStudio中使用AndroidVectorAssetStudio时.svg文件它向我显示以下错误:我拜访了官员地点他们说,此类标签尚未得到支持,因为资产工作室可以处理非常简单的图像。我在想是否有任何方法可以将这些标签替换为等效标签支持的。我不知道该怎么做。请帮忙,谢谢!:)看答案如果要使用向量图像,则可以简单地将SVG图像转换为向量图像这里然后,您可以将此向量用作可绘制的图像。

C++ 摆脱单例 : alternative to functors and static methods

我崇高的追求是摆脱单例和静态类。背景:我有以下结构:Cmd经常实例化的对象,它保存命令的名称(字符串),以及任何类的静态方法的仿函数作为指针。它通常在主类中创建,例如Input、Console、Render等,并引用创建它的类中的方法,为这些方法提供运行时口头接口(interface)。Cmds还以字符串数组的形式解释参数,其中第一个参数是Cmd的名称,所有连续的字符串都是被调用的静态方法的直接参数。参数计数和参数数组存储在Commander中,并在每次Cmd调用之前更改。CommanderCommander用于解释字符串命令(可能直接或通过控制台),并执行以字符串形式存储在缓冲区中的

c++ - 关于可维护性,映射表是比大型 switch 语句更好的设计吗?

我正在将文本文件从一组定义翻译成另一组定义,我通过编写一个小型解析器解决了这个问题。一旦我确定了一个符号,我最终会得到一个case语句,它根据用户选择的输入选项决定调用哪个翻译例程(这些代码在不同的机器上意味着不同的东西)。我基本上采用多种输入格式并将它们转换为单一输出格式,超过400个独特的符号。问题在于,随着这个项目从几个简单的翻译(每个都在自己的头文件中)发展为十几种或更多的输入格式,维护起来越来越麻烦。这些头文件中的每一个都包含一个生成相关输出的monsterswitch语句。一切正常,但看起来确实很笨拙。我是否可以通过为每个输入机器创建映射表(即包含输入和输出符号的二维数组)

c++ - 如何使用 BOOST_STATIC_ASSERT

#include#includeusingnamespacestd;//Iunderstandhowthefollowingtemplatefunctionworks//template//TGetMax(Ta,Tb){//Tresult;//result=(a>b)?a:b;//return(result);//}//Ihavedifficultiestounderstandhowthefollowingcodeworks//whenweshouldusethissyntaxtemplatevoidaccepts_values_between_1_and_10(){BOOST_STA