gpt4 book ai didi

未知类型的 C++ 模板参数

转载 作者:行者123 更新时间:2023-11-30 03:38:44 25 4
gpt4 key购买 nike

假设我们要编写一个函数,该函数应该获取一个值作为模板参数(例如,出于效率原因),但我们事先不知道我们期望的参数类型。可以将其实现为

template<typename T, T val>
func() { cout << val; }

然而,调用这样的函数并不好玩

func<int, 5>()

是否可以重写 func s.t.可以这样调用吗?

func<5>()

最佳答案

主要取决于您的实际功能的解决方案是按如下方式定义它:

template<typename T>
constexpr void func(T val) { }

然后调用它作为 f(5)并从函数本身的参数中推导出模板参数。

否则,在 C++14 中,您无法避免使用 template<typename T, T value> 模式.
它与标准模板库使用的模式相同,请参见 std::integral_constant 的定义示例.

减轻(也许)样板的可能解决方案是基于结构的使用,例如:

template<typename T>
struct S {
template<T value>
static void func() {}
};

你可以这样做:

using IntS = S<int>;
// ....
IntS::func<5>();

在即将发布的 C++17 修订版中,您将设法按如下方式进行:

template<auto value>
void func() {}

这可以调用为 f<5>() ,这就是您要找的..

关于未知类型的 C++ 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335519/

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