gpt4 book ai didi

c++ - 带有模板化参数的偏特化函数模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:10 24 4
gpt4 key购买 nike

我有一个模板函数(为了简单起见,我们称它为“add”)

template<typename T>
inline T add(const T a, const T b)
{
return a+b;
}

我可以针对某些类型专门化它,但我想做的是针对模板化类型专门化它。

在我的例子中,我的模板类型叫做 Vec2<T> .它是一个二维三角 vector (如 x 和 y,而不是 c++ vector !)

我想做的是专门化我的 add Vec2<T> 一般情况下的函数,而不是必须专门针对 Vec2 的每种类型可以一起使用。

Vec2<T> 的图书馆来自 V2d 的类型定义(双),V2f ( float )和 V2i (整数)。

我可以专门针对其中的每一个使用类似的东西:

template<>
inline V2f add<V2f>(const V2f a, const V2f b)
{
return V2f(a.x + b.x, a.y + b.y);
}

但是,我希望能够做的事情是这样的:

template<typename S>
inline Vec2<S> add<Vec2<S> >(const Vec2<S> a, const Vec2<S> b)
{
return Vec2<S>(a.x + b.x, a.y + b.y);
}

我觉得一定有办法做到这一点,但我正在努力寻找合适的语法。

最佳答案

Partial template specialization不允许用于函数模板(它仅适用于类模板)。你可以使用 function template overloading相反:

template<typename S>
inline Vec2<S> add(const Vec2<S>& a, const Vec2<S>& b)
{
return Vec2<S>(a.x + b.x, a.y + b.y);
}

当您调用 add 并将 Vec2 的所有实例化作为参数时,它将被选中。


最好将参数改为pass-by-const-reference以避免复制。

关于c++ - 带有模板化参数的偏特化函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40586008/

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