1

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

// 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;
}

非常感谢您的帮助。

谢谢

4

1 回答 1

1

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

template <class T>
PrimeTable* CreatePrimeTable();

接下来是针对两种可能的 T 类型的函数的实现/专业化。注意,对于非通用案例的完整专业化/实现,您从template部件中删除模板参数,从而在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>().

PrimeTable* table3 = CreatePrimeTable<int>();
于 2013-06-08T05:06:02.833 回答