小编Try*_*yss的帖子

C++模板:按类分类,如何分解代码?

假设我有这个课程:

class Component1;
class Component2;
// many different Components
class Component42;

class MyClass
{
public:
    MyClass(void) {};
    std::list<Component1> component1List;
    std::list<Component2> component2List;
    // one list by component
    std::list<Component42> component42List;
};
Run Code Online (Sandbox Code Playgroud)

我想创建一个具有以下签名的函数:

template<class T> void addElement(T component);
Run Code Online (Sandbox Code Playgroud)

它应该做到以下几点:

  • 如果component是类型Component1,请将其添加到Component1List
  • if component是类型Component2,添加到Component2List,等等.

可能吗?这样做的好方法是什么?

我可以通过以下函数获得相同的行为:

template<class T> void addElement(int componentType, T component);
Run Code Online (Sandbox Code Playgroud)

但我宁愿不必指定componentType这样的:它是无用的信息,它打开了可能的错误的大门(如果componentType不代表组件的类型).

c++ oop templates design-patterns

14
推荐指数
2
解决办法
662
查看次数

symfony2错误枝条"扩展另一个的模板不能有一个体"

我有错误"扩展另一个模板的模板不能在DFSiteBundle中有一个主体:Accueil:index.html.twig",但我在块外面没有html.

复制问题的最小代码:

这不起作用:

{% extends "::layout.html.twig" %}

{% stylesheets 'bundles/DFSite/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

{% block content %}
    Test
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

这项工作:

{% extends "::layout.html.twig" %}

{% block content %}
    Test
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

使用layout.html.twig:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    {% stylesheets %}{% endstylesheets %}
    <title>{% block title %}The title{% endblock %}</title>
</head>
<body>

{% block content %}
{% endblock %}

</body>
Run Code Online (Sandbox Code Playgroud)

如果我直接添加这个

{% stylesheets 'bundles/DFSite/css/*' filter='cssrewrite' %} …
Run Code Online (Sandbox Code Playgroud)

symfony

2
推荐指数
1
解决办法
6293
查看次数

标签 统计

c++ ×1

design-patterns ×1

oop ×1

symfony ×1

templates ×1