gpt4 book ai didi

c++ - 什么时候需要在模板特化的第二个 <> 中指定类型?

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:55 27 4
gpt4 key购买 nike

我有一个基本模板:

template <class X> void f(X x) {}

现在我看到了两种专门化它的方法:

template <> void f<>(int x) {}

或者:

template <> void f<int>(int x) {}

gcc 吃掉这两种变体,但不会同时吃掉这两种变体。

这两个专业相同吗?特化模板时,什么时候需要在第二个 <> 中指定类型?

最佳答案

您的两个变体执行相同的特化。您还可以使用第三种变体

template <> void f(int x) {}

它还将特化 X = int 的函数模板.它等同于您的第二个变体。

带有 f<> 的变体和普通f依靠模板参数推导,而 f<int> variant 显式指定模板参数。

您可能需要在 <> 中指定类型明确地当模板参数推导是不可能的。在其他情况下,您不必这样做。

例如,如果您的函数参数列表不依赖于模板参数 X , 那么你别无选择,只能明确指定模板参数

template <typename X> void bar() {}

template <> void bar<int>() {}

以上编译。但是,如果您将特化替换为

template <> void bar<>() {} 

它将无法编译,因为编译器无法推导出模板参数。

关于c++ - 什么时候需要在模板特化的第二个 <> 中指定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17541469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com