关于C ++模板

时间:2013-06-08 04:53:14

标签: c++

我想知道如何理解下面的模板定义。你能解释一下吗?

// First, we define some factory functions for creating instances of
// the implementations.  You may be able to skip this step if all your
// implementations can be constructed the same way.

template <class T>
PrimeTable* CreatePrimeTable();

template <>
PrimeTable* CreatePrimeTable<OnTheFlyPrimeTable>() {
  return new OnTheFlyPrimeTable;
}

template <>
PrimeTable* CreatePrimeTable<PreCalculatedPrimeTable>() {
  return new PreCalculatedPrimeTable(10000);
}

我只知道C模板函数定义如下:

template <Type A, Type B>
func(A a, B b) {
  //do some operation with a and b;
}

是否与下面的定义相同?

template <class T>
PrimeTable* CreatePrimeTable(){
  return new T;
}

非常感谢您的帮助。

感谢

1 个答案:

答案 0 :(得分:1)

第一部分是一个前向声明,告诉编译器所有类PrimeTable* CreatePrimeTable<T>()都存在T

template <class T>
PrimeTable* CreatePrimeTable();

接下来是针对两种可能类型的T的函数的实现/特化。注意,对于非通用情况的完全特化/实现,您从template部分移除模板参数,从而导致{{ 1}}在每个函数之前。

template<>

这意味着像这样的代码将编译和工作

template <>
PrimeTable* CreatePrimeTable<OnTheFlyPrimeTable>() {
  return new OnTheFlyPrimeTable;
}

template <>
PrimeTable* CreatePrimeTable<PreCalculatedPrimeTable>() {
  return new PreCalculatedPrimeTable(10000);
}

并且(不幸的是)这将编译,但无法链接,因为没有PrimeTable* table1 = CreatePrimeTable<PreCalculatedPrimeTable>(); PrimeTable* table2 = CreatePrimeTable<OnTheFlyPrimeTable>(); 的实现。

CreatePrimeTable<int>()