问题描述
这可能只是出于学术目的。
因为我注意到我的实际示例可能不适合提出这个问题。
最初我写过类似的东西
auto bak_ptr{ptr}; // think of an `int* ptr`
备份地址。
现在,我想知道是否可以通过使用更有意义的,范围更广的C ++ 20概念代替那个笨拙的auto
来做得更好。
经过深思熟虑,该特定示例中的正确选择可能只是
std::copyable auto bak_ptr{ptr};
因为这反映了备份的意图,即某物的副本。
但是仍然存在的学术问题是:什么是正确地映射原始指针概念的行为的正确的(概念标准库)实现?如果需要,让我们将“指针”限制为指向对象的指针。还有指向void,函数,成员的指针-可能使问题复杂化。
我想到了与迭代器的关系。希望不再正确回答我自己的问题:std::contiguous_iterator
在某些情况下是否是有价值的选择?
有人可以就该主题分享或多或少完整的专家观点吗?
为什么还没有针对该概念的std :: pointer_to_object标准库实现(把事情大喊大叫)?
解决方法
只要建立在std::is_pointer
上,就应该没错
template <class T>
concept pointer =
std::is_pointer<T>;
感谢@cigien的想法。
我想说的是,在简单的备份示例中,选择std::copyable
是完全正确的。因为这就是您要执行的备份,所以请通过副本再次将其还原。
要表明bak_ptr
是原始的对象指针,不需要花哨的技巧:
auto* bak_ptr{ptr};