如何根据C ++中的模板类型调用函数?

用户名

我有下面的类层次结构:

class Boy : Child
class Girl : Child

template<class T>
class Parent
{
    vector<T> children;
}


class AnnaBoys: public Parent<Boy>
{
 void ProcessChild() { do things specific to Anna boys };
};

class AnnaGirls: public Parent<Girl>
{
 void ProcessChild() { do things specific to Anna girls};
};

这两个ProcessChild()函数在做无关紧要的事情,不是可能的“模板化” add<T>

我希望避免创建两个Anna类,而只需执行以下操作:

template<class T>
class Anna: public Parent<T>
    {
     void ProcessChild() 
     { 
        if(T is Boys)
         ProcessBoys();
        else
         ProcessGirls();
      };
    };

是否有任何干净的方法可以在运行时不执行dynamic_cast呢?

谢谢。

温特穆特

您可以专门化单个成员函数,而无需指定整个类。在这种情况下:

标头:

template<typename T>
class Anna : Parent<T> {
public:
  void ProcessChild() {
    // default implementation (if desired)
  }
};

template<> void Anna<Boy>::ProcessChild();
template<> void Anna<Girl>::ProcessChild();

源文件:

template<> void Anna<Boy>::ProcessChild() {
  // implementation for boys
}

template<> void Anna<Girl>::ProcessChild() {
  // implementation for girls
}

inline如果要保留仅标头中的内容,则可以通过声明标头中的特殊成员函数来实现

template<typename T>
class Anna : Parent<T> {
public:
  void ProcessChild() {
    // default implementation (if desired)
  }
};

template<> inline void Anna<Boy>::ProcessChild() {
  // implementation for boys
}

template<> inline void Anna<Girl>::ProcessChild() {
  // implementation for girls
}

感谢@Deduplicator发现这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据C ++模板函数中的类型名称调用不同的构造函数

来自分类Dev

根据C ++模板函数中的类型名称调用不同的构造函数

来自分类Dev

函数指针类型的c ++模板调用

来自分类Dev

尝试根据模板类型重载模板类中的虚函数

来自分类Dev

如何从 blazeComponent 中的不同模板调用函数?

来自分类Dev

如何正确调用模板中的函数?

来自分类Dev

如何根据模板的类型编译函数?

来自分类Dev

c ++模板为特定类型的类调用特定的构造函数

来自分类Dev

如何知道模板构造函数中的模板类型

来自分类Dev

如何在模板函数C ++中更改类型名称的签名

来自分类Dev

C ++模板函数根据模板参数返回类型

来自分类Dev

根据C ++模板函数的参数类型解析为不同的类型

来自分类Dev

如何在模板函数中根据对象的类型构造不同的对象?

来自分类Dev

如何在Django模型中定义的模板中调用函数?

来自分类Dev

在 PostgreSQL 中,如何根据 C 函数中的类型 Oid 识别类型是复合类型?

来自分类Dev

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

来自分类Dev

如何在AngularJS模板中调用标准javascript函数?

来自分类Dev

如何在基于组件的模板中调用函数?

来自分类Dev

如何在Swig模板中调用标准javascript函数?

来自分类Dev

如何在Django模板中包含函数调用?

来自分类Dev

如何通过调用函数在vue模板中获取数据

来自分类Dev

如何在Swig模板中调用标准javascript函数?

来自分类Dev

如何从angularjs中的模板调用控制器函数

来自分类Dev

在C ++中对模板参数调用静态函数

来自分类Dev

C ++:在基本模板类中调用派生的专用虚拟函数

来自分类Dev

如何在Chapel中编写模板函数的类型签名

来自分类Dev

C ++:默认在模板函数中初始化整数类型

来自分类Dev

函数C ++中具有返回类型大小的模板?

来自分类Dev

当C ++中也有非模板函数时,调用专门的模板函数

Related 相关文章

  1. 1

    根据C ++模板函数中的类型名称调用不同的构造函数

  2. 2

    根据C ++模板函数中的类型名称调用不同的构造函数

  3. 3

    函数指针类型的c ++模板调用

  4. 4

    尝试根据模板类型重载模板类中的虚函数

  5. 5

    如何从 blazeComponent 中的不同模板调用函数?

  6. 6

    如何正确调用模板中的函数?

  7. 7

    如何根据模板的类型编译函数?

  8. 8

    c ++模板为特定类型的类调用特定的构造函数

  9. 9

    如何知道模板构造函数中的模板类型

  10. 10

    如何在模板函数C ++中更改类型名称的签名

  11. 11

    C ++模板函数根据模板参数返回类型

  12. 12

    根据C ++模板函数的参数类型解析为不同的类型

  13. 13

    如何在模板函数中根据对象的类型构造不同的对象?

  14. 14

    如何在Django模型中定义的模板中调用函数?

  15. 15

    在 PostgreSQL 中,如何根据 C 函数中的类型 Oid 识别类型是复合类型?

  16. 16

    C ++:如何在可变参数模板参数上调用带有类型参数的函数?

  17. 17

    如何在AngularJS模板中调用标准javascript函数?

  18. 18

    如何在基于组件的模板中调用函数?

  19. 19

    如何在Swig模板中调用标准javascript函数?

  20. 20

    如何在Django模板中包含函数调用?

  21. 21

    如何通过调用函数在vue模板中获取数据

  22. 22

    如何在Swig模板中调用标准javascript函数?

  23. 23

    如何从angularjs中的模板调用控制器函数

  24. 24

    在C ++中对模板参数调用静态函数

  25. 25

    C ++:在基本模板类中调用派生的专用虚拟函数

  26. 26

    如何在Chapel中编写模板函数的类型签名

  27. 27

    C ++:默认在模板函数中初始化整数类型

  28. 28

    函数C ++中具有返回类型大小的模板?

  29. 29

    当C ++中也有非模板函数时,调用专门的模板函数

热门标签

归档