我想知道如何理解下面的模板定义。你能解释一下吗?
// 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;
}
非常感谢您的帮助。
感谢
答案 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>()