Amn*_*non 6 c++ pimpl-idiom inline
当我使用pimpl习语时,将所有方法定义放在类定义中是否是个好主意?例如:
// in A.h
class A {
class impl;
boost::scoped_ptr<impl> pimpl;
public:
A();
int foo();
}
// in A.cpp
class A::impl {
// method defined in class
int foo() {
return 42;
}
// as opposed to only declaring the method, and defining elsewhere:
float bar();
};
A::A() : pimpl(new impl) { }
int A::foo() {
return pimpl->foo();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,将方法定义放在类定义中的唯一问题是(1)实现在包含类定义的文件中可见,(2)编译器可以使方法内联.
在这种情况下,这些不是问题,因为类是在私有文件中定义的,并且内联没有任何效果,因为只在一个地方调用方法.
将定义放在类中的优点是您不必重复方法签名.
那么,这样可以吗?还有其他问题需要注意吗?
我认为您回答了自己的问题:两种解决方案是等效的。
但是,我不太确定“内联没有效果,因为这些方法仅在一个地方调用”:当函数未内联时,可能会存在额外的调用。但很可能编译器足够聪明,可以优化它们,使其远离外部类中的单行转发调用。
最后,我相信这只是品味问题。
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |