创建具有可变数量的成员的类型

天哪

通常,在编写Vector类型时,我会执行以下操作:

template <typename Type>
struct Vector2{
    Type x;
    Type y;
};

...然后重复进行Vector3Vector4依此类推。

这让我感到奇怪,是否有更好的方法可以做到这一点?例如,通过表达某种类型(例如模板)在一定时间内必须具有的成员数。我不确定编译器如何知道每个成员的命名方式,但只是想检查一下我是否错过了一个绝妙的技巧。

pmr

如果您的类型相同,则std::array可能会有所帮助。然后,您可以将访问器函数编写为自由函数,并在大小超出范围时获取静态断言。如果您的类型不同,则可以使用std::tuple代替std::array

#include <array>
#include <iostream>

namespace X {

template<typename T>
using Vector2 = std::array<T, 2>;

template<typename T>
using Vector3 = std::array<T, 3>;

// named accessors, you might want to make the accepted parameter more
// specific, e.g. std::array<T,I>
template<typename T>
decltype(auto) x(T&& t) { return std::get<0>(std::forward<T>(t)); }
template<typename T>
decltype(auto) y(T&& t) { return std::get<1>(std::forward<T>(t)); }
template<typename T>
decltype(auto) z(T&& t) { return std::get<2>(std::forward<T>(t)); }

}

int main()
{
  X::Vector2<int> v = {1, 2};
  // you can use [] syntax
  std::cout << v[0] << " " << v[1] << std::endl;
  // or named access
  X::x(v) = 2;
  X::z(v); // static assertion triggered
  return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建具有可变数量的类型参数的模板?

创建具有可变数量的泛型类型参数的元组的表达式

在Kotlin中具有可变数量的args的Lambda类型?

如何创建具有可变数量的参数的函数?

是否可以创建具有可变数量的元素的数组?

具有可变数量的实参的脚本

ArrayList 具有可变数量的数组

如何创建具有可变数量的“ for”循环且每个循环具有不同索引的函数?

具有可变数量/参数类型的函数的TypeScript声明文件

如何在JSDoc中注释具有可变数量参数的Function类型的对象?

具有可变数量的特定模板类型参数的模板函数

具有特定类型的可变数量参数的 C++ 函数

如何在R中创建具有可变数量的列表的列表

如何在SwiftUI中创建具有可变数量的子视图的视图?

在clojure中创建具有可变数量的空格的字符串

函数是否需要可变数量的类型的args和具有相同数量的类型的args的闭包?

创建可变数量的视图

创建可变数量方法

枚举可以具有可变数量的参数吗?

具有可变数量参数的函数的指针

v-for 具有可变数量的内容块

制作可以具有可变数量元素的对象数组

具有可变数量参数的函数的通用打字稿

具有可变数量参数的OCaml函数

具有可变数量参数的 f 字符串?

具有可变数量ifelse中断的R函数

具有可变数量表标题的 DataTables 呈现函数

Python咖喱函数具有可变数量的参数

具有可变数量参数的 Concat CString