gpt4 book ai didi

c++ - 具有可选成员的 POD 模板类

转载 作者:行者123 更新时间:2023-11-30 00:38:01 26 4
gpt4 key购买 nike

我正在寻找一种方法来选择性地包含 C++ 类的成员以生成 POD 结构。我发现这工作得很好,但是不标准:

#include <iostream>

template <int v, int n, int t>
struct Point
{
int vertex[v];
float normal[n];
double texcoord[t];
};

int main()
{
std::cout << (sizeof (Point<0,0,1>)) << std::endl;
std::cout << (sizeof (Point<1,0,1>)) << std::endl;
std::cout << (sizeof (Point<1,1,2>)) << std::endl;
std::cout << (sizeof (Point<0,0,0>)) << std::endl;
return 0;
}

因此 Point<1,0,0> 将只包含一个顶点(实际上 int 类型实际上是 vector3 类型),依此类推。这样做的主要原因是为了轻松支持 OpenGL 的交错数组。

最佳答案

也许尝试这样的事情:

#include <type_traits>

template <unsigned int v, unsigned int n, unsigned int t>
struct Point
{
int data[v + n + t];

template <unsigned int i>
typename std::enable_if<(i < v), int &>::type
vertex() { return data[i]; }

template <unsigned int i>
typename std::enable_if<(i < v + n), int &>::type
normal() { return data[v + i]; }

template <unsigned int i>
typename std::enable_if<(i < v + n + t), int &>::type
texcoord() { return data[v + n + i]; }
};

用法:

Point<1,1,2> p;
p.vertex<0>() = 50;

关于c++ - 具有可选成员的 POD 模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925597/

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