gpt4 book ai didi

c++ - 对象切片是一种可行的技术吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:47 24 4
gpt4 key购买 nike

假设我有一个名为 AudioSample 的类,实现不相关。AudioSamples 可以从多个源加载,对于每个源,我从 AudioSample 派生一个类,为相关源添加相关的加载程序代码。加载后,我故意将对象切片,将其传递给按值使用 AudioSample 的函数。

我觉得这很好,它可以防止使用各种加载函数污染基类,并防止我在必须添加新加载器时不得不修改(经过试验和测试的)基类。

但是,当在 stackoverflow 中搜索对象切片时,我只找到将其描述为问题并解释其潜在陷阱的答案,这让我想知道:我是否以不应该的方式使用它?这样做是否会遇到我目前不知道的潜在问题?

最佳答案

对象切片本身不是问题,因为它是一个定义明确的操作。只是它通常会引发“WTF”的时刻,因为它很少是有意的。我最喜欢的代码质量指标是每分钟阅读 WTF 的倒数,所以从这个角度来看,这是一个坏主意,因为它需要大量的文档来说明“是的,我真的知道我在做什么。”

因此,我更倾向于将其限制在一个名称明确且用途明确的函数中。像这样:

class AudioSampleLoadedViaFoo : public AudioSample
{
// ...
public:
AudioSample getLoadedSample() const
{
return *this; // Slice on purpose to remove load-specific stuff
}
};

这样,在外部代码中使用只会看到一个定义良好的函数,切片只是一个实现细节。

关于c++ - 对象切片是一种可行的技术吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889637/

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