草庐IT

TEMPLATE

全部标签

c++ - g++ 错误 : specialization after instantiation (template class as friend)

考虑以下C++代码:templateclassSingleton{};classConcreteSingleton:publicSingleton{templatefriendclassSingleton;};intmain(){}Singleton应该是ConcreteSingleton的friend:它适用于Microsoft的可视化C++编译器。但是,我不能用g++4.8.4编译它。错误是:error:specializationof‘Singleton’afterinstantiationtemplatefriendclassSingleton;有什么办法可以解决吗?

c++ - 来自模板特化的模板

有没有办法从模板特化中获取模板?例如。std::unordered_map来自std::unordered_map类型的变量作为模板模板参数传递。最小的例子:#includetemplateclasst_map>classA{public:typedeft_mapmap_type;};intmain(intargc,charconst**argv){std::unordered_mapmap;//decltypeyieldsstd::unordered_map(asexpected).typenameA::map_typemap_2;return0;} 最佳

c++ - 当不相关的类型定义为别名时,对函数的调用是不明确的

看完一篇很棒的文章TrueStory:EfficientPacking我尝试自己实现元组作为练习:#include#include#includetemplatestructtuple_leaf{Tvalue;};templateT&get(tuple_leaf&leaf){returnleaf.value;}templatestructtuple_base;templatestructtuple_base,Ts...>:tuple_leaf...{usingtuple_base_t=tuple_base;template>tuple_base(Args&&...args):tuple

c++ - 对于曾经在 gcc5 中工作的情况,在 gcc6 的部分特化中无法推导出模板参数

此代码在gcc6中导致错误(但在gcc4.8、5.2和clang3.6中工作正常):templatestructouter{templatestructinner{};};templatestructis_inner_for{templatestructpredicate{staticconstexprboolvalue=false;};templatestructpredicate::templateinner>{staticconstexprboolvalue=true;};};static_assert(is_inner_for::templatepredicate::inner

c++ - 编译时分派(dispatch) : conditional on valid call

给定以下代码:templateclassJoinedObjectGroup:public_ObjectSpaceHolder,public_ObjectSpaceHolder{public:JoinedObjectGroup(GroupA&groupA,GroupB&groupB):_ObjectSpaceHolder(groupA),_ObjectSpaceHolder(groupB){}templateObjectTypeget(){//Dispatchtoappropriatehandler:onlyoneofthefollowingactuallycompilesas//eit

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

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

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++编译器(最新的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++ - 为什么以下模板声明格式错误?

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