gpt4 book ai didi

c++ - 如果推导其中一个模板参数,是否可以不指定所有模板参数?

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

假设我有这样一个函数:

template <typename T>
void f(T& x);

由于类型推导,我可以在不指定类型的情况下使用它:

f(5.0f); // same as f<float>(5.0f);

假设我改变函数:

template <typename T, int N>
void f(T& x);

即使可以推导出类型,我现在也必须这样调用它

f<float, 5>(5.0f);

但是我想要这样的东西:

f<auto, 5>(5.0f); // or something like f<5>

到目前为止,我已经找到了一种方法来做到这一点:

template <int N>
struct F {
template <typename T>
static void f(T& x) {
...
}
}

所以我现在可以使用:

F<5>::f(5.0f);

还有其他方法吗?

最佳答案

为什么不改变模板参数的顺序:

template <int N, typename T>
void f(T& x) {
// ...
}

然后这样调用它:

double a;
...
f<1>(a);

编辑:

您还可以提供函数的两个模板重载,其中模板参数以相反的顺序和一个默认参数如下所示:

template <typename T, int N = 5>
void f(T& x) {
// ...
}

template <int N, typename T = double>
void f(T& x) {
// ...
}

并可互换地调用它:

double a = 4.0;
f(a);
f<2>(a);
f<double, 1>(a);
f<double>(a);

Live Demo

关于c++ - 如果推导其中一个模板参数,是否可以不指定所有模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33988450/

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