我们说我们有一个模板功能:
template <class T> T max(T a, T b) { return a > b ? a : b; }
由于编译器在模板参数推导期间没有执行任何隐式类型转换,我们可以通过以下两种方式调用max(2, 5.5)
:
max(static_cast<float>(2), 5.5f);
max<float>(2, 5.5);
第二种情况对我有意义,但是我们什么时候以下面给出的方式进行显式模板实例化(实例化而不用 char 类型调用函数max
):
template char max(char a, char b);
我们从中获得了什么?
答案 0 :(得分:1)
如果您正在编写库,那么库的代码未调用的模板将不会被实现,因此库可能缺少您打算提供的某些函数。 显式实例化将强制编译器为指定的模板创建实现,即使没有对它进行任何调用。
当您最终将库链接到客户端应用程序时,链接器将找到您的库支持的类型的实现。
也许英语母语人士的解释会更清晰:https://docs.microsoft.com/it-it/cpp/cpp/explicit-instantiation