gpt4 book ai didi

c++ - 有没有一种优雅的方法来声明具有相同模板参数的一组函数?

转载 作者:行者123 更新时间:2023-12-01 14:57:14 25 4
gpt4 key购买 nike

例如,假设我有一个简单的2D vector 模板化结构:

template <typename T>
struct Vec { T x, y; };
还有一种通用的求和方式:
template <typename T, typename U>
constexpr auto operator+(const Vec<T>& u, const Vec<U>& v) {
return Vec<decltype(u.x + v.x)>{u.x + v.x, u.y + v.y};
}
但是我必须为所有其他基本操作(-,*,/等)重写 template <typename T, typename U>。我希望我可以做类似的事情:
template <typename T, typename U>
{
constexpr auto operator+(const Vec<T>& u, const Vec<U>& v) { /* ... */ };
constexpr auto operator-(const Vec<T>& u, const Vec<U>& v) { /* ... */ };
/* ... */
}
另外,如此 thread中所述,当嵌套在decl-specifier中时,不允许 auto,这意味着以下解决方案无效(即使它以某种方式编译):
constexpr auto operator+(const Vec<auto>& u, const Vec<auto>& v) { /* ... */ }

最佳答案

您可以通过内联定义运算符来保存一个模板参数:

template <typename T>
struct Vec {
T x, y;
template<class U> auto operator+(Vec<U> const& v)
{ return Vec<decltype(x + v.x)>{x + v.x, y + v.y};}
template<class U> auto operator-(Vec<U> const& v)
{ return Vec<decltype(x - v.x)>{x - v.x, y - v.y};}
};
如果您完全希望避免编写重复的代码,则宏将是避免这种情况的一种方式(这是否是一种好习惯,以及它是否有助于理解代码,可能是您的喜好和上下文问题)

关于c++ - 有没有一种优雅的方法来声明具有相同模板参数的一组函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63206447/

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