gpt4 book ai didi

c++ - 受 void* 影响的属性函数样式约定

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

我正在用 C++ 设计一个公共(public) API,我相信我想保留 C++ 属性函数样式约定,它们看起来像 int& Value()const int& Value() const 而不是按值返回/分配的 get/set 前缀,因为我觉得使用模式更简洁且同样可读,同时很容易融入现有的 C++ 代码。

我需要允许程序员提供他自己的元数据。为此,我选择公开一个 void* 属性函数。问题当然是有这样的签名:

class foo {
int& Value();
const int& Value() const;
void* Metadata()
void* const Metadata() const
};

...不起作用,因为以下内容无法编译:

 void* ptr = ...;
foo.Metadata() = ptr;

正因为如此,我必须使用类似下面的东西来让它工作:

class foo {
int& Value();
const int& Value() const;
void* GetMetadata();
void SetMetadata(void* const data);
};

但这会导致样式不一致,因此现在我选择在整个 API 中坚持使用 get/set 前缀,例如:

class foo {
int GetValue() const;
void SetValue(int value);
void* GetMetadata() const;
void SetMetadata(void* const data);
};

当然,这不符合我想使用的语言约定。整个事情有替代方法吗?如果是这样,它是什么?我是否坚持使用 get/set 前缀?

注意:我不能用用户元数据模板替换 void*,因为 API 应该尽可能稳定。

此外,我已经为用户字符串提供了类型为 unsigned char* 的字符串获取/设置对。

更新:经过仔细(重新)考虑,我选择坚持使用 get/set 前缀,我也不会使用 void* 的引用 - 如果 void* 发出闻起来,void*& 几乎是一个公共(public)垃圾填埋场。因此,我基本上选择了与此类似的东西:

typedef void* Any;

class foo {
...
Any GetObject() const;
void SetObject(Any);
...
};

感谢您的输入。 :)

最佳答案

并不是说我确定这是最好的设计,但是,坚持这个问题:如果对于“int”类型的属性,您写:

int& Value(); //Used as setter
int Value()const; //Used as getter

对“void*”类型的属性做同样的事情:

void*& Meta(); //Used as setter
void* Meta()const; //Used as getter

关于c++ - 受 void* 影响的属性函数样式约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597040/

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