有人能给我一个例子,说明何时拥有类模板的成员模板是有意义的?

时间:2013-11-09 06:35:41

标签: c++ templates

我正在阅读类模板本身如何拥有一个模板函数的成员函数,但本书的例子并没有明确为什么这是必要的。如果它已经是一个类模板,我会认为其中需要使用泛型类型的任何函数已经能够使用它们而不需要将其自身定义为模板函数...如果这有意义吗?

1 个答案:

答案 0 :(得分: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);
}

此处,K的类模板参数Collection用作std::map键的类型,成员函数模板add用于选择可以的派生类使用成员函数模板参数T构建。