草庐IT

c++ - 解决 C++ 中缺乏模板化虚函数的问题

我不确定如何最好地表述这个问题,但我并不是在问如何实现模板化虚函数本身。我正在构建一个实体组件系统,我有两个重要的类-World和Entity.World实际上是一个抽象类,实现(我们称它为WorldImpl)是一个模板化类,允许使用自定义分配器(可以与std::allocator_traits一起使用)。组件是我们可以附加到实体的任何数据类型。这是通过调用名为assign的模板函数来完成的。在实体上。这就是问题所在:我试图让实体在创建和初始化组件时使用世界的分配器。在一个完美的世界里,你会调用Entity::assign(...)这会问WorldImpl使用任何合适的分配器创建组件。

c++ - 变量模板偏特化和 constexpr

我正在努力理解模板,特别是变量模板。考虑一下:templateconstintgcd1=gcd1;templateconstintgcd1=M;std::cout它打印出错误的0。但是,如果我使用constexpr而不是上面的const,我会得到正确的答案3。我再次使用结构模板得到正确答案:templatestructgcd2{staticconstintvalue=gcd2::value;};templatestructgcd2{staticconstintvalue=M;};std::cout::value我做错了什么?编辑:gcd1也可以在没有基本案例特化的情况下正常编译。怎么会

C++模板模板非类型参数

我正在努力实现以下目标:templateboolFunction_,typename...Types_>constexprautofind(Tuple)noexcept{//...}可能的功能可能是:templateinlineconstexprboolis_pointer_v=is_pointer::value;那么find的用法是:Tuplet;find(t);不用担心find的实现,我只是问如何将“templateboolFunction_”作为bool部分目前在C++中无效。感谢任何帮助!编辑:这是一个示例,说明为什么我不能将“is_pointer”传递给函数:template

c++ - 基类和派生类中的模板成员之间的重载解析

Microsoft编译器(VisualStudio201715.2)拒绝以下代码:#includestructB{template=0>voidf(){}};structD:B{usingB::f;template=0>voidf(){}};intmain(){Dd;d.f();d.f();}错误是:errorC2672:'D::f':nomatchingoverloadedfunctionfounderrorC2783:'voidD::f(void)':couldnotdeducetemplateargumentfor'__formal'note:seedeclarationof'D

c++ - 在 C++ 中使用模板而不是桥接模式

我有三种数据链路:RS485、I2C和蓝牙。每条数据链路都具有连接、读取和写入数据等功能。在PC软件上,我必须实现应用程序/协议(protocol)层才能与设备一起工作。在我之前关于OOP的问题中,我得到了使用桥接模式或工厂方法的答案,但我认为这可以做得更好。我会问使用模板来完成这项任务是否更好。这是我想如何使用它的简单示例://LowleveldatalinkclassclassRS485{public:voidsend(constchar*data){//datalinkfunctiontosenddatausingRS485printf("RS485:%s\n",data);}}

c++ - 如果在函数模板中声明,局部类是否依赖?

当前的C++编译器(最新的gcc、clang)需要typename以下示例中的关键字:templatestructA{};templatevoidf(T){structC{};typedeftypenameA::TypeType;//typenamerequired}如果typename省略了gcc(4.9,5.0)报错:need'typename'before'A::Type'because'A'isadependentscope根据我对C++11标准的阅读,这个例子在其他方面是良构的。此行为似乎包含在以下措辞中:[temp.dep.type]/8Atypeisdependentif

C++ 组合参数模板元编程

我不熟悉C++中的模板和元编程。我现在要做的是:我有一个带有模板的结构,该模板需要类型为char的非类型可变参数包,简单地定义如下:templatestructMyStruct{};我有第二个结构模板,它需要两种类型,如下所示:templatestructTogether{};我想要实现的是:cout,MyStruct>::result必须打印:abcd提前致谢 最佳答案 使用模板,您可以通过部分特化实现模式匹配。像这样声明一个主模板声明:templatestructTogether;然后以某种方式为具有“外观”的类型定义部分特化:

c++ - 为什么以下模板声明格式错误?

这个问题在这里已经有了答案:Whydoesnotatemplatetemplateparameterallow'typename'aftertheparameterlist(2个答案)关闭7年前。为什么下面的声明无效?templatetypenameT>structS{};我认为这是有效的,因为以下是有效的:templateclassT>structS{};我可以从[gram.temp]中的标准中读取它似乎是有效的,但是gcc给了我以下输出:prog.cpp:4:38:error:expected'class'before'T'templatetypenameT>^

c++ - 如何将函数应用于数组中的所有元素(在 C++ 模板类中)

我有一个存储数字数组的模板类,我想将现有(标量)函数应用于每个元素。例如,如果我们假设我的类是std::vector,那么我希望能够在所有元素上调用(例如)std::cos函数。也许一个电话看起来像这样:std::vectorA(3,0.1f);std::vectorB=vector_function(std::cos,A);注意我还必须处理std::complex类型(为此调用适当的复杂std::cos函数)。我找到了thisanswer这建议将函数类型作为模板参数:templatestd::vectorvector_function(Ffunc,std::vectorx)但是,我根

c++ - 在 nim 中包装嵌套的模板化类型

我有一个像这样的C++类型:templateclassVector{structIterator{};};在C++中我可以使用Iterator作为Vector::Iterator.我如何包装它以便从Nim使用它?c2nim发射typeVector[T]{.importcpp...}=objecttypeIterator[T]{.importcpp...}无法编译因为nim没有嵌套类型,并且会产生Vector::Iterator而不是Vector::Iterator.我可以在Nim中使用非嵌套类型:typeVectorIterator[T]{.importcpp:"Vector::Ite