我读过一些关于图的代码。但是我有一个关于C++中模板的问题。
typedef int intT;
template <class intT>
struct edge {
intT u;
intT v;
edge(intT f, intT s) : u(f), v(s) {}
};
template <class intT>
struct edgeArray {
edge<intT>* E;
intT numRows;
intT numCols;
intT nonZeros;
void del() {free(E);}
edgeArray(edge<intT> *EE, int r, int c, int nz) :
E(EE), numRows(r), numCols(c), nonZeros(nz) {}
edgeArray() {}
};
该代码等于
struct edge {
int u;
int v;
edge(int f, int s) : u(f), v(s) {}
};
...
为什么template<class int>
在这个代码中?
template<class T=int>
和template<class int>
之间有什么区别?
intT
有两个,一个是typedef int intT
,另一个是template< class intT>
,intT
的范围不同??
更新:
模板参数的名称在其自身的持续时间内对外部作用域隐藏相同的名称:
typedef int N;
template< N X, // non-type parameter of type int
typename N, // scope of this N begins, scope of ::N interrupted
template<N Y> class T // N here is the template parameter, not int
> struct A;
https://en.cppreference.com/w/cpp/language/scope
为什么
template<class int>
在这个代码中?
我们只能在这里猜测。可能有人设计了edge
和edgeArray
来保存类型为int
(内置的int
!(的值,然后想使用模板,并认为将模板参数命名为int
很聪明。但是,令人惊讶的是,由于int
是一个关键字,所以它不会编译。
template<class T=int>
和template<class int>
之间有什么区别?
template<class T=int>
声明了一个模板,其中有一个名为T
的模板参数,默认为int
。这意味着您可以省略template参数,默认情况下它将变为int
。
template<class int>
另一方面声明具有一个名为CCD_ 20的模板参数的模板。如上所述,这不会编译。