0

我正在阅读有关类模板本身如何具有作为模板函数的成员函数的信息,但是本书的示例并未清楚说明为什么需要这样做。如果它已经是一个类模板,我认为其中任何需要使用泛型类型的函数都已经能够使用它们,而无需将函数本身定义为模板函数......如果这有意义吗?

4

1 回答 1

1

这是模板类内部模板化成员函数的示例用法,作为具有自定义键的某个基类的统一存储。

struct Base
{
  virtual void print() const= 0;
  virtual ~Base(){}
};

#include <iostream>

template <typename T>
struct Derived: Base
{
  T t;
  void print() const{ std::cout<< t<< '\n'; }
  Derived(T const &t): t(t){}
};

#include <map>
#include <memory>

template <typename K>
struct Collection
{
  std::map<K, std::unique_ptr<Base>> datum;

  template <typename T>
  void add(K const &key, T const &t)
  {
    datum.insert(std::make_pair(key, std::unique_ptr<Base>(new Derived<T>(t))));
  }
  void print(K const &key){ datum.at(key)-> print(); }
};

int main()
{
  Collection<int> c;
  c.add(0, 42);
  c.add(1, std::string("hi"));
  c.print(0);
  c.print(1);
}

这里,类模板参数KforCollection用作std::map键的类型,成员函数模板add用于选择可以使用成员函数模板参数构造的派生类T

于 2013-11-09T07:24:12.410 回答