实际上,我试图理解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; };
答案 0 :(得分:3)
这些是模板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 );
答案 1 :(得分:2)
这些是模板专精。 homeDeliv
和pickUp
是其他类型的类型。例如,
template<> struct Packets<int> { static const unsigned ID = 42; };
然后
std::cout << Packets<int>::ID << "\n"; // prints 42.
答案 2 :(得分:1)
这些是模板专精。
究竟是什么“homeDeliv”和“pickUp”
它们是用户定义的数据类型或typedef
。
这里是否定义了
不,这里没有定义它们。它们必须已在代码中的其他位置定义。这里使用它们来创建Packets
答案 3 :(得分:0)
这是一个模板专业化,homeDeliv作为pickUp都是类型。
答案 4 :(得分:0)
这是一个模板专业化。如果您只想为给定类型提供功能,则通常以这种方式使用它。在这种情况下,homeDeliv
和pickUp
必须已经在其他地方定义,然后:
template <typename> struct X; // incomplete type will cause error on instantiation
template <> struct X<int> { /* whatever */ }; // now X<int> is valid, but all other
// still cause compilation errors