gpt4 book ai didi

c++ - 常量和重载构造函数

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

我有一个主要用于“结构化”缓冲区的类。一个客户端通常用来写,另一个用来读。对于写入,类会设置默认值,但对于读取,它应该保持不变。

class Formatter
{
public:
//! Used by writer
Formatter( unsigned char* Buffer ) :
m_Buffer( Buffer )
{
Buffer[ 0 ] = 1; //say this is the format
}

//! Used by reader
Formatter( const unsigned char* Buffer ) :
m_Buffer( Buffer )
{

}

//...Other methods returns pointer to structure

private:
unsigned char* m_Buffer;
};

这里的问题在于,读者很容易通过传入非常量缓冲区来犯错误。

//..assume pBuffer is non-const
//We really want to read
const Formatter myFormatter( pBuffer );
//We really want const Formatter myFormatter( const_cast<const unsigned char*>(pBuffer) );

我真的想不出有什么好的方法可以在不让用户明确表示的情况下防止用户犯这个错误。

有人知道一个不错的技巧吗?

提前致谢。

最佳答案

struct writer_access {};
Formatter( writer_access, unsigned char* Buffer ) :

这里我们用标签标记具有不同语义的构造函数。意外使用几乎是不可能的。您通过传递 (writer_access{}, pbuff)

来调用它

关于c++ - 常量和重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30963264/

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