Tag: 模板

类似std :: transform的函数返回转换的容器

我想实现一个类似于std::transformalgorithm的函数,而不是通过我想创build的参数取得输出迭代器,并返回一个带有已转换input元素的容器。 假设它被命名为transform_container并且有两个参数:容器和函子。 它应该返回相同的容器types,但可能通过不同的元素types进行参数化(Functor可以返回不同types的元素)。 我想使用我的function,如下面的例子: std::vector<int> vi{ 1, 2, 3, 4, 5 }; auto vs = transform_container(vi, [] (int i) { return std::to_string(i); }); //vs will be std::vector<std::string> assert(vs == std::vector<std::string>({"1", "2", "3", "4", "5"})); std::set<int> si{ 5, 10, 15 }; auto sd = transform_container(si, [] (int i) { return i / 2.; }); //sd will […]

朋友声明声明一个非模板函数

我有一个基类类似于下面的代码。 我试图超载<<用于cout。 但是,g ++说: base.h:24: warning: friend declaration 'std::ostream& operator<<(std::ostream&, Base<T>*)' declares a non-template function base.h:24: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning 我已经尝试在类声明/原型之后添加<>。 但是,然后我得到它does not match any template declaration 。 我一直在试图让运营商的定义完全模板化(我想),但我只能得到它与以下代码,手动实例化运营商。 base.h […]

GCC错误与可变参数模板:“对不起,未实现:不能扩展'标识符…'到一个固定长度的参数列表”

在GCC的C ++ 11中进行可变模板编程时,偶尔会遇到一个错误,提示“对不起,未实现:无法将”标识符…“扩展为固定长度的列表。 如果我删除代码中的“…”,那么我会得到一个不同的错误:“错误:参数包不能用'…'扩展。 所以如果我有“…”,GCC会调用这个错误,如果我把“…”取出,GCC也会调用这个错误。 我已经能够处理这个问题的唯一方法是从头开始用一种不同的方法完全重写模板元程序,并且(幸运的是)我最终得到了不会导致错误的代码。 但我真的想知道我做错了什么。 尽pipe谷歌search,尽pipe进行了大量的实验,我不能确定我做了不同的模板代码之间产生这种错误,和没有错误的代码。 错误信息的措辞似乎意味着代码应该按照C ++ 11标准工作,但是GCC目前还不支持它。 或者,也许这是一个编译器错误? 这是一些产生错误的代码。 注意:我不需要你为我写一个正确的实现,而只是指出我的代码是什么导致了这个特定的错误 // Used as a container for a set of types. template <typename… Types> struct TypePack { // Given a TypePack<T1, T2, T3> and T=T4, returns TypePack<T1, T2, T3, T4> template <typename T> struct Add { typedef TypePack<Types…, T> type; }; }; […]

什么是非诱骗情境?

我最近接触到这个问题 ,可以归纳为“这是一个没有被诱惑的背景”。 具体来说,第一个说这是一个事情,然后redirect到“细节”的标准,而第二个引用的标准,这是至less可以说是神秘的。 难道有人能像我这样向凡人解释什么是一个非诱惑的情境 ,什么时候发生,为什么会发生?

在Xcode 5的所有新文件中更改copyright / top-comment /“header”

当您在Xcode5中创build任何文件时, 文件 的顶部如下所示: 有没有办法改变模板或创build,使其看起来不同? 当我说“改变”时,这是一个可能的例子: 请注意,我知道如何更改名称,产品名称,公司名称等。我想知道如何更改实际的“模板”本身。 (如果可能。) 我根本不在乎,如果每次Xcode升级时都必须重做更改 这只是关于Xcode 5.不是Xcode 4。 我已经知道如何改变名字和其他单独的项目; 我想整体地改变整个“模板” 我很欣赏这很多是不可能的或可能是不切实际的(也许你必须改变几十个文件,或者一些这样的)。 如果是这种情况,我深深地感谢信息,谢谢。 请注意:在networking上我注意到,每次有人问这个问题,很多人都回答说如何在Xcode中制作“新模板” 。 例如,新types或类别的新模板。 (可能一旦人们看到“模板”这个词,他们立即开始input关于如何在这个意义上添加一个新的“模板”的解释。)要明确我唯一要求的是如何改变页面顶部的“标准文本”或“版权文本” – 所有页面 – 就是这样。 (很难知道如何引用上面的两个图像中显示的文本..如果你说“头”,它使人想到.h文件;另一方面,它不是一个真正的版权声明,因为版权只是其中一部分,我猜这是“文件注释块的顶部”,但是由于与其他条款的混合,这是不可能的。

模板方法的未定义参考错误

过去的一个半小时里,这让我疯狂。 我知道这是一件小事,但却找不到什么不对(事实上,星期五的下午,这个事实并没有帮助)。 我已经定义了下面的类,将保存从文件中读取的configuration参数,并让我从我的程序访问它们: class VAConfig { friend std::ostream& operator<<( std::ostream& lhs, const VAConfig& rhs); private: VAConfig(); static std::string configFilename; static VAConfig* pConfigInstance; static TiXmlDocument* pXmlDoc; std::map<std::string, std::string> valueHash; public: static VAConfig* getInstance(); static void setConfigFileName( std::string& filename ) { configFilename = filename; } virtual ~VAConfig(); void readParameterSet( std::string parameterGroupName ); template<typename T> T readParameter( const […]

用可变模板扩展

以下3个gunfunction的区别是什么? template <class… Ts> void fun(Ts… vs) { gun(A<Ts…>::hun(vs)…); gun(A<Ts…>::hun(vs…)); gun(A<Ts>::hun(vs)…); } 我对使用一个具体例子解释这三个调用的答案感兴趣。

C ++模板和鸭子打字有什么关系?

对我来说,C ++模板使用了鸭子打字的想法,对吗? 是否意味着模板类或方法中引用的所有generics都是鸭子types?

如何使Jade停止HTML编码元素的属性,并产生一个文字string值?

更新 Jade v0.24.0使用!=语法来修复属性。 option(value!='<%= id %>') 我试图用jade创build一个<option> ,其中选项的值是一个UnderscoreJS模板标记: <%= id %>但是我不能让它工作,因为jade将我的标记文本转换为&lt;= id &gt; 。 这是我的Jade标记: script(id="my-template", type="text/template") select(id="type") &lt;% _.each(deviceTypes, function(type){ %> option(value='&lt;%= type.id %>') <%= type.name %> &lt;% }) %> 我期望它产生这个HTML: <script id="my-template" type="text/template"> <select id='type'> <% _.each(deviceTypes, function(type){ %> <option value="<%= type.id %>"> <%= type.name %> </option> <% }) %> </select> </script> 但是我得到的是这样的: […]

与任何types的参数匹配的C ++ variadic模板模板参数

我想知道是否有可能写一个模板函数,可以采取任何其他任意模板作为参数,并正确匹配模板名称(即不只是结果类)。 我所知道的工作是这样的: template<template<typename …> class TemplateT, typename… TemplateP> void f(const TemplateT<TemplateP…>& param); 这将匹配例如f(std::vector<int>())或f(std::list<int>())但不会为f(std::array<int, 3>()) ,因为第二个参数是size_t而没有types。 现在我想可以做一些疯狂的事情: template<template<typename …> class TemplateT, size… Sizes, typename… TemplateP> void f(const TemplateT<Sizes…, TemplateP…>& param); 希望编译器能正确地派生TemplateP省略号或Sizes省略号为空。 但是,这不仅丑陋,而且还适用于采用type或size_t参数的模板。 它仍然不会匹配例如与bool参数的任意模板。 重载方法也是如此: template<template<typename …> class TemplateT, typename… TemplateP> void f(const TemplateT<TemplateP…>& param); template<template<typename …> class TemplateT, size… Sizes> void f(const TemplateT<Sizes…>& param); 此外,如果我们想要混合size_t和typenames ,这种方法不会工作。 […]