这不是我熟悉的语法,但我在 另一个问题 中看到了它,例如:
template<> struct Allowed<std::string> { };
template<>
实际上是什么意思,没有模板类型/参数?
原文由 Mr. Boy 发布,翻译遵循 CC BY-SA 4.0 许可协议
它是模板专业化。典型的情况是部分特化:
#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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这是一个专业。
template<>
表示特化本身没有模板化——即,它是显式特化,而不是部分特化。