草庐IT

Templates

全部标签

c++ - 使用非捕获 lambda 作为可变参数模板函数的函数指针参数给出 "no matching function call"

我目前正在尝试为ecs编写“foreachwith”。templatevoidforeach(void(*func)(Entitye,T...args)){std::vectorintersection;//...Findallentitieswithallthetypesfor(size_ti=0;i(intersection[i])...);}它与函数参数配合得很好voidfoo(Entitye,inti){setComp(e,(int)e);}foreach(foo);//Worksasexpected但不能像lambda那样复制和粘贴相同的函数foreach(//eveniff

c++ - 为什么 `uint64_t` 的模板特化与 Mac 平台上的 `unsigned long` 不匹配?

这个问题在这里已经有了答案:longlongintvs.longintvs.int64_tinC++(3个答案)关闭3年前。为什么以下代码片段在Mac平台上使用clang++编译失败?sizeofunsignedlong和uint64_t都是8,所以我认为它们是同一类型。那么为什么编译认为Serializer是抽象的吗?因为我定义了Serializer,Serializer,Serializer,Serializer,Serializer,Serializer,Serializer,Serializer,有没有办法解决这个问题并避免定义更多类型,如Serializer?错误信息如下,c

c++ - 使用可变参数模板函数围绕类实现基于 pImpl 的包装器

总结我正在编写一个库和一个客户端应用程序。在库中,我尝试围绕另一个静态链接的第三方库(特别是spdlog)编写包装器,并尝试使用pImpl惯用语将其完全隐藏在客户端应用程序中。问题是第三方库使用可变模板函数,所以我也需要在我的库中。背景我对包装器的第一次尝试非常简单直接,但后来我在客户端应用程序中收到“没有这样的文件或目录”错误,因为第三方header包含在我的库header中。我接下来尝试创建一个pImpl类并让它进行编译,但在客户端中我再次遇到“undefinedreference”链接器错误。将实现的源代码拉到我的包装器的header中让我回到最初的“没有这样的文件”问题。对此进

c++ - 帮助在 std::map 中存储模板类的 intrusive_ptr

我在boost::intrusive_ptr中包含一个Locker类型的小模板类,我想将其存储在std::map中:templateboolLockerManager::AddData(conststd::string&id,T*pData){boost::intrusive_ptr>lPtr(Locker(pData));//Line359-compilesmMap.insert(make_pair(id,lPtr));//Line361-giveserror}Locker只是一个容器类;它的构造函数看起来像:templateLocker::Locker(T*pData):Intru

c++ - 通过模板基类专门化模板

我正在编写一个模板,我试图为其提供一个类的特化,该类本身就是一个模板类。在使用它时,我实际上是用模板化类的衍生物实例化它,所以我有这样的东西:templatestructArg{staticinlineconstsize_tSize(constT*arg){returnsizeof(T);}staticinlineconstT*Ptr(constT*arg){returnarg;}};templatestructArg>{staticinlineconstsize_tSize(constWrap*arg){returnsizeof(T);}staticinlineconstT*Ptr(

c++ - 当提供模板参数列表时,继承模板类列表

我正在尝试编写一些元编程代码:继承自某个类foo结果继承自key,key,key,...最简单的方法并不完全有效,因为您不能多次从同一个空类继承。处理“...”部分不是很好(因为它是复制面食),但可以。好的,下面是尝试:templatestructchar_if{typenameTHENtype;};templatestructchar_if{typenameELSEtype;};classemptyClass{};templateclasskey{chargetKey(){returnc;}};templateclassinheritFromAll{typenamechar_if,e

c++ - 在 "Modern C++ Design"/Loki 中找到的小对象分配器是否已被弃用以支持更新的实现?

看来代码和书已经沦为现代C++运动的基础,不再更新了。在Boost或TR1中是否有某种替代品? 最佳答案 查看Boost.Pool图书馆。 关于c++-在"ModernC++Design"/Loki中找到的小对象分配器是否已被弃用以支持更新的实现?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2443165/

模板化类型的 C++ 模板特化

我希望通过使用BOOST_STATIC_ASSERT来帮助使用我的一些模板代码的用户,让他们知道他们使用了一个不兼容的类型,其编译错误消息比当前使用不兼容类型生成的怪物更简单。该示例有点太复杂,无法在此处重现,但希望这能捕获我想要的本质:我的问题是如何格式化最后一行“模板模板”?templateclassInterestingType{}templatestructis_interesting_type{staticconstboolvalue=false;};templatetypenameInterestingType>//Noideahowtoformatthis..struct

c++ - 我的代码能否使用 'T' 或 'const T &' 特化,以可用者为准?

我们正在与一个内部图书馆合作,其中有一个StringBuilder用于转换VariableValue列表的类对象变成一个字符串。VariableValue对象可以从任意类型构造(通过专门化convertVariable模板函数)。这是描述场景的代码:structVariableValue{//Constructa'VariableValue'object,avarianttypewhichcanrepresentvaluesof//oneoffourtypes:string,number(integer),booleanandfloatingpoint.explicitVariable

c++ - 模板和字符串文字和 UNICODE

新:感谢所有帮助过我的人!答案标在下面,我在下面(q.v.)的问题中用一个功能版本扩展了答案:我似乎经常遇到这种情况(在更新我们的字符串实用程序库时):我需要一种方法来获得一个适用于char和wchar_t的模板,它使用各种字符串文字。目前我发现这具有挑战性,因为我不知道如何使用编译时方法将字符串文字更改为窄字符或宽字符。作为考虑,采用以下基于TCHAR的函数://quotethegivenstringin-placeusingthegivenquotecharacterinlinevoidMakeQuoted(CString&str,TCHARchQuote=_T('"')){if(