gpt4 book ai didi

C++:类内的直接访问器或访问函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:59 25 4
gpt4 key购买 nike

我有两个版本的名为“顶点”的类,一个使用坐标的直接访问器:

struct vertex
{
// Coordinates
std::array<double, 3> coords;

// Direct accessors
double & x;
double & y;
double & z;

// Constructor
template<typename... T> vertex(T &&... coordinates) :
coords{{ std::forward<T>(coordinates)... }},
x( coords[0] ), y( coords[1] ), z( coords[2] )
{ }
};

和其他使用访问函数的:

struct vertex
{
// Coordinates
std::array<double, 3> coords;

// Access functions
double & x() { return coords[0]; }
double & y() { return coords[1]; }
double & z() { return coords[2]; }

// Constructor
template<typename... T> vertex(T &&... coordinates) :
coords{{ std::forward<T>(coordinates)... }}
{ }
};

对于这种特定情况,哪种方法更好?如果有任何其他建议,我将不胜感激。谢谢!

最佳答案

出于封装的目的,我通常会遍历函数。

但这是一个非常特殊的情况,因为您正在处理顶点。如果您计划操作大量此类对象(渲染或变换网格),那么直接访问在性能方面有一些好处。

一些图形库在要求效率的实时环境中使用直接访问(有些书籍也建议)进行类似 vector 的操作。

看看Ogre::Vector3例如。

尽管我不会在您的第一个解决方案中做您正在做的事情。就像其他人说的您无缘无故地将已用空间加倍(最终有很多顶点)。从我的角度来看,在高性能的情况下,这可能是最好的顶点:

class Vertex
{
public:
double X;
double Y;
double Z;
};

关于C++:类内的直接访问器或访问函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889393/

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