在 C 中,template<> 是什么意思?

新手上路,请多包涵

这不是我熟悉的语法,但我在 另一个问题 中看到了它,例如:

 template<> struct Allowed<std::string> { };

template<> 实际上是什么意思,没有模板类型/参数?

原文由 Mr. Boy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

这是一个专业。 template<> 表示特化本身没有模板化——即,它是显式特化,而不是部分特化。

原文由 Puppy 发布,翻译遵循 CC BY-SA 2.5 许可协议

它是模板专业化。典型的情况是部分特化:

 #include <iostream>

template<class T1, class T2>
struct foo
{
  void doStuff() { std::cout << "generic foo "; }
};

template<class T1>
struct foo<T1, int>
{
 void doStuff() { std::cout << "specific foo with T2=int"; }
};

如您所见,特化从模板参数中删除了一个元素,并显式声明了一种类型,而不是已删除的类型。这意味着如果只有一种模板类型,那么 <> 就会变为空:

 template<class T1>
struct bar
{
  void doStuff() { std::cout << "generic bar"; }
};

template<>
struct bar<int>
{
 void doStuff() { std::cout << "specific bar with T1=int"; }
};

原文由 Mephane 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题