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

How to call a function depending on template type in C++?

我有以下 class 的层次结构:

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> 那样的 "templetable"。

我希望避免创建两个 Anna class,而是这样做:

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

有没有在运行时不执行 dynamic_cast 的简洁方法?

谢谢。

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

Header:

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
}

如果你想保留 header-only:

,可以通过声明 inline 在 header 中拥有专门的成员函数
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 发现了这一点。