实际上,我当时是在尝试理解c ++中的一段代码并遇到了这个片段,这是Packet被设置为新的数据类型吗?什么是“ homeDeliv”和“ pickUp”。是在这里定义它们还是在别的地方定义它们,只是在这里使用?

我是C ++语法的新手。请帮助...

template< typename Pac > struct Packets;
  template<> struct Packets< homeDeliv > { static const unsigned ID = 0; };
  template<> struct Packets< pickUp > { static const unsigned ID = 1; };

最佳答案

这些是模板Packets的显式专业化。

每当您使用Packets< homeDeliv >时,都将使用该实现。

非显式专业化使用默认模板。

struct homeDeliv {};
struct foo {};
template< typename Pac > struct Packets { static const unsigned ID = 42; } ;
template<> struct Packets< homeDeliv > { static const unsigned ID = 0; };

//.....
Packets<homeDeliv> x;
assert ( x.ID == 0 );

Packets<foo> y;
assert ( y.ID == 42 );

Packets<int> z;
assert ( z.ID == 42 );

关于c++ - 在C++中使用模板和结构的困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19513814/

10-09 13:16