我在头文件中有以下代码
class Bar {
public:
void public_foo();
private:
void private_foo();
};
Run Code Online (Sandbox Code Playgroud)
该实现隐藏在源文件中
void Bar::public_foo(){
private_foo();
}
void Bar::private_foo(){
// Some more stuff
}
Run Code Online (Sandbox Code Playgroud)
我想在头文件中看不到私有函数.做这个的最好方式是什么?我知道两种方式:
1)private_foo创建这样的非成员函数
void private_foo(Bar* this){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
并public_foo像这样称呼:private_foo(this).这对我来说不是很吸引人,因为它不是特别的OO编程.
2)使用这样的隐藏实现类
// In header
class Bar {
public:
virtual void public_foo();
virtual ~Bar() { };
};
Bar* CreateBar();
// In Source
class Bar_impl : public Bar {
public:
void public_foo();
private:
void private_foo();
};
Bar* CreateBar(){
return new Bar_impl;
}
void Bar::public_foo(){
private_foo();
}
void Bar::private_foo(){
// Some more stuff
}
Run Code Online (Sandbox Code Playgroud)
这有效,但对于这么简单的事情来说有点太多了.
有第三种(更好的)方法吗?
编辑:回应@jdehesa,因为我喜欢戴上语言设计师的帽子,这是我理想的语法(不正确的C++语法,但人们可以梦想)
// In header
class Bar {
public:
void public_foo();
};
// In Source
classdef Bar { // Notice my new "classdef" keyword
public:
void public_foo(){
}
private:
void private_foo(){
}
};
Run Code Online (Sandbox Code Playgroud)
一个问题是,为了正确的内存分配,实现类不能添加额外的变量(公共或私有).
小智 6
您可以使用PIMPL惯用法
例:
// Pimpl idiom - basic idea
class widget {
// :::
private:
struct impl; // things to be hidden go here
impl* pimpl_; // opaque pointer to forward-declared class
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |