快速回答:
这取决于您要实现什么。
长而无聊的答案:
你打了钉子。
我通常不喜欢“ C ++”允许“ Struct(s)”允许声明方法。最好,我对所需的方法使用显式的“类”,而对唯一的字段仅使用POD“结构”。
但是,我同意一些基本的简单操作,例如:
- 分配初始值(“构造函数”)
- 制作结构的副本(“副本构造函数”
- 将值分配给现有结构(“过载分配运算符”)
是必需的,在这种情况下,结构方法是有意义的。
建议
另一个可能的解决方案是使用POD结构,但从概念上讲仍将它们视为类和对象。
将这些声明包装在名称空间中,并添加全局函数以执行最重要的操作。
代码声明可能与此类似:
namespace Customers
{
struct CustomerStruct
{
char[255] FirstName;
char[255] LastName;
int Age;
bool IsAlive;
bool IsMarried;
}; // struct
CustomerStruct* CreateCustomer
(
char* NewFirstName;
char* NewLastName;
int NewAge;
bool NewIsAlive;
bool NewIsMarried;
)
{
CustomerStruct* NewCustomer = new CustomerStruct();
NewCustomer->FirstName = NewFirstName;
NewCustomer->LastName = NewLastName;
NewCustomer->Age = NewAge;
NewCustomer->IsAlive = NewIsAlive;
NewCustomer->IsMarried = NewIsMarried;
return NewCustomer;
} // CustomerStruct* CreateCustomer (...)
} // namespace
应用该解决方案的代码可能是这样的:
#include <Customers>
using Customers;
int main (...)
{
int ErrorCode = 0;
CustomerClass* ThisCustomer =
Customers::CreateCustomer
("John", "Doe", 23, true, true);
// do something with "ThisCustomer"
delete ThisCustomer;
return ErrorCode;
} // int main(...)
当需要对数据进行大量内存分配或与其他低级共享库进行交互时,这种替代方法会更好。
经过一些更改后,这种方法已应用于游戏开发中。
额外
就个人而言,我考虑了“ C ++”的语法扩展,甚至考虑了解决此问题的基于“ C ++”的新PL:
// "Plain Old Data" Structure
// No Methods, No "Functors", allowed
strict struct CustomerStruct
{
char[255] FirstName;
char[255] LastName;
int Age;
bool IsAlive;
bool IsMarried;
}; // strict struct
// Object Oriented "Plain Old Data" Structure
// Yes, Methods and "Functors" allowed
relaxed struct CustomerStruct
{
char[255] FirstName;
char[255] LastName;
int Age;
bool IsAlive;
bool IsMarried;
public void Foo();
public void Bar();
public (void*) (SomeFunctor) ();
}; // relaxed struct
// Class and Object Oriented
class CustomerClass
{
public char[255] FirstName;
public char[255] LastName;
public int Age;
public bool IsAlive;
public bool IsMarried;
public void Foo();
public void Bar();
}; // class
干杯。