Max*_*Max 3 c++ access-control
当编码在功能上紧密耦合的类,但是你想要一个简单的接口到世界其他地方时,如果我可以做这样的事情,那将是很好的:
class log
{
private:
log_context& cont;
public:
create_log_section(std::string name)
{
cont.create_log_section(name);// this is fine! It's "internal"
cont.this_is_private(); // doesn't compile. Don't want anyone touching my privates!
}
};
class log_context
{
internal:
void create_log_section(std::string name);
private:
void this_is_private();
internal friend log; // Wow, possible?
}
Run Code Online (Sandbox Code Playgroud)
现在,这将允许日志访问上下文的相关部分,而不是私有部分.程序的其余部分应使用日志添加任何上下文.它也可以log_contexts在日志之间传递强类型而不需要任何额外的功率.我意识到这个特殊的解决方案是不可能的,但是有什么常见的解决方案呢?
您可以使用内部类来执行此操作
class log_context
{
class internal
{
friend log;
static void create_log_section( log_context & context, std::string name)
{
context.create_log_section( name );
}
}
private:
void create_log_section(std::string name);
void this_is_private();
}
class log
{
private:
log_context& cont;
public:
void create_log_section(std::string name)
{
log_context::internal::create_log_section( cont, name );// this is fine! It's "internal"
}
};
Run Code Online (Sandbox Code Playgroud)
作为内部仅作为私有静态函数,只有其朋友可以访问它
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |