没有<>的模板布尔函数,是什么意思?

时间:2019-03-11 01:31:44

标签: c++ templates

FLIF图像库具有以下定义:

template bool flif_decode(FileIO& io, Images &images,
    callback_t callback, void *user_data, int, Images &partial_images,
    flif_options &, metadata_options &, FLIF_INFO* info);

我看过模板专业化,但是仍然有尖括号。 这是什么意思?

1 个答案:

答案 0 :(得分:3)

编译器通常能够在显式模板实例化中推断出模板参数,这就是事实。

请参阅[temp.explicit](排泄物矿

  

如果显式实例化是针对函数或成员函数的,则   声明中的 unqualified-id 应该是 template-id ,或者是可以推导出所有模板参数的 ,   模板名称操作员功能ID

标准提供了以下示例:

template void sort(Array<char>&); // argument is deduced here

在您的示例中,函数声明(也是一个定义)如下所示:

template <typename IO>
bool flif_decode(IO& io, /*etc*/) { /*...*/}

因此,当我们稍后看到这样的显式实例时:

template bool flif_decode(FileIO& io, /*etc*/);

编译器可以推断出FileIO是您希望用于typename IO的类型