Tag: 模板

是否使用std :: array <T,N>导致代码膨胀?

我曾经在几个地方看到过推荐使用std::array在C ++中使用C风格的数组,声称这是一个更好,更安全的替代scheme,没有开销。 看到: 标准的容器数组没有超出它所需的元素的空间开销,[…]。 换句话说,它非常像一个没有问题的内置数组。 ( C ++ 11 FAQ ) 然而,据我所知,作为一个模板容器, 将会有一个开销,只要程序大小,因为它会生成代码为每个不同的Narrays是实例。 假设我的程序在不同的地方使用了std::array ,有N个不同的整数,这会导致代码臃肿吗? 这可以忽略不计吗? 我应该担心这一般的非types模板参数吗?

Angularjs中的指令模板函数有什么好处?

根据文档, template可以是一个函数,它接受两个参数,一个element和attributes并返回一个表示模板的string值。 它用HTML的内容replace当前元素。 replace过程将所有属性和类从旧元素迁移到新元素。 compile函数处理转换模板DOM。 它有三个参数,一个element , attributes和transclude函数。 transclude参数已被弃用。 它返回一个link函数。 看起来template和compilefunction非常相似,可以达到同样的效果。 template函数定义了一个模板, compile函数修改了模板DOM。 但是,它可以在template函数本身中完成。 我看不到为什么修改templatefunction以外的template DOM。 反之亦然,如果可以在compile函数中修改DOM,那么template函数需要什么?

模板类中是否允许纯虚拟方法?

有一次,我确信你不能这样做,但是前几天我正在玩一些代码,似乎是编译和工作的。 我只是想validation我不只是幸运。 一个模板类可以有一个纯虚函数 – 我猜这也意味着只是简单的虚方法对于析构函数也是有效的? template <typename WordType> class DataSource { public: DataSource(); DataSource(DataSource const& other); virtual ~DataSource(); virtual void Put( WordType const* const data, unsigned int const wordCount) = 0; } 我已经尝试过在网上查找它,所有我已经能够find的是,你不能有一个正常的类,如这样的虚拟方法(纯的或其他): class DataSource { public: DataSource(); DataSource(DataSource const& other); virtual ~DataSource(); template <typename WordType> virtual void Put( WordType const* const data, unsigned int […]

如何在编译期间切换/selecttypes?

有没有一种标准的方式,我可以在编译时在c + + 11中的无符号索引select一个types? 例如,像这样的东西: using type_0 = static_switch<0,T,U>; // yields type T using type_1 = static_switch<1,T,U>; // yields type U 如果有一个可变模板版本,这将是非常有用的。

条件扩展模板

我使用Symfony 2和Twig,我的问题非常简单: 在一个视图中,我想扩展一个基于variables的布局。 如果该variables为false我想扩展UdoWebsiteBundle::layout.html.twig ,如果它是true我想扩展UdoWebsiteBundle::layout_true.html.twig 。 这是我试过的代码: {% block layout_extender %} {% if intro == 'false' %} {% extends 'UdoWebsiteBundle::layout.html.twig' %} {% else %} {% extends 'UdoWebsiteBundle::layout_true.html.twig' %} {% endif %} {% endblock %} 我得到这个错误: 第7行的“UdoWebsiteBundle:home:home.html.twig”中禁止使用多个扩展标签 有没有其他办法可以做到这一点?

为什么C ++中的types别名在其语法中使用“using”而不是“typedef”?

显然,input别名和模板types别名在语义上等同于typedefs和typedefs的扩展以支持模板。 如何using关键字创build新的语法,而不是使用typedef作为typedef的第一个和一些语法扩展。 注意:这不是“使用和typedef之间的区别”问题的克隆。 我知道using定义了一个typedef的家庭的优势。 我所问的是为什么标准人员决定让这个扩展名使用using关键字而不是typedef关键字。 这似乎只是增加了语言的混乱。

模板还是抽象基类?

如果我想使类具有适应性,并且可以从外部select不同的algorithm – 在C ++中最好的实现是什么? 我主要看到两种可能性: 使用抽象基类并传入具体对象 使用模板 这里有一个小例子,在各个版本中实现: 版本1:抽象基类 class Brake { public: virtual void stopCar() = 0; }; class BrakeWithABS : public Brake { public: void stopCar() { … } }; class Car { Brake* _brake; public: Car(Brake* brake) : _brake(brake) { brake->stopCar(); } }; 版本2a:模板 template<class Brake> class Car { Brake brake; public: […]

模板化的typedef?

我正在使用libgc,C和C ++的垃圾收集器。 要使STL容器垃圾收集,必须使用gc_allocator。 而不是写作 std::vector<MyType> 一个必须写 std::vector<MyType,gc_allocator<MyType> > 有没有办法来定义类似的东西? template<class T> typedef std::vector<T,gc_allocator<T> > gc_vector<T>; 我前一阵子检查,发现这是不可能的。 但是我可能错了,或者可能有其他的方法。 用这种方式定义地图特别令人不快。 std::map<Key,Val> 变 std::map<Key,Val, std::less<Key>, gc_allocator< std::pair<const Key, Val> > > 编辑:在尝试使用macros后,我发现下面的代码打破了它: #define gc_vector(T) std::vector<T, gc_allocator<T> > typedef gc_vector( std::pair< int, float > ) MyVector; 模板types定义中的逗号被解释为macros参数分隔符。 所以看起来,内部类/结构是最好的解决scheme。 这里是一个关于如何在C ++ 0X中完成的例子 // standard vector using my allocator template<class T> […]

Handlebars.js如果块助手==

你将如何改变下面的代码,使其工作? 问题是这个=='一些消息'expression式: <ul> {{#each errors}} {{#if (this == 'some message') }} <li>Status</li> {{else}} <li>{{this}}</li> {{/if}} {{/each}} </ul>

在Angular指令中使用外部模板(templateURL)上的$ compile

我有一个recursion的Angular指令,它使用一个模板variables,并在link函数中进行编译。 问题是,我的模板已经变得非常长,失去控制,我想在外部HTML文件中将其外部化(这也使得它更容易例如自动缩进)。 如何将外部模板加载到可在$compile内部使用的指令中? 我见过templateURL ,但是这不让我命名该variables并将其传递给$compile函数。 var template = "<p>My template</p>"+ "<this-directive val='pass-value'></this-directive>"; return { scope: { … }, … link: function(scope, element){ element.html(template); $compile(element.contents())(scope); } } 和