要使用ess-rdired浏览对象,我按照ESS手册并将以下内容添加到我的.emacs:
(autoload 'ess-rdired "ess-rdired"
"View *R* objects in a dired-like buffer." t)
Run Code Online (Sandbox Code Playgroud)
当我这样做时M-x ess-rdired,会出现一个列出当前环境中对象的缓冲区.
但是,当我按下快捷方式时p,v我收到此错误:
"现在没有ESS进程与此缓冲区相关联."
此外,可以ess-rdired在更改对象时更新对象的信息吗?
请参阅我继承的PIMPL实现.在派生类中,DerivedImpl继承自BaseImpl.
问题:指向Impl的指针是否只在基类中定义,如下面的代码?如果是这样,每次我需要使用基指针时,我必须将它转换为派生类型.但是,根据分析结果静态转换shared_ptr看起来很昂贵,因为这种强制转换被广泛使用.并且转换函数不能在标题中内联,因为它在那里是不完整的.
也许我犯了一些错误.或者使用智能指针有更好的实现吗?
// Base.h
class BaseImpl; // pre-declaration
class Base
{
public:
Base();
explicit Base(BaseImpl* ptr);
~Base();
protected:
std::shared_ptr<BaseImpl> d_Ptr;
};
Run Code Online (Sandbox Code Playgroud)
// baseimpl.h
class BaseImpl
{
double mDate;
};
Run Code Online (Sandbox Code Playgroud)
// Derived.h
#include "Base.h"
class DerivedImpl;
class Derived :
public Base
{
public:
Derived();
~Derived();
std::shared_ptr<DerivedImpl> d_func();
const std::shared_ptr<DerivedImpl> d_func() const;
};
Run Code Online (Sandbox Code Playgroud)
// Derived.cpp
#include "Derived.h"
#include "DerivedImpl.h"
Derived::Derived() : Base(new DerivedImpl())
{
}
Derived::~Derived()
{
}
std::shared_ptr<DerivedImpl> Derived::d_func()
{
return std::static_pointer_cast<DerivedImpl>(d_Ptr);
}
const std::shared_ptr<DerivedImpl> Derived::d_func() const
{
return std::static_pointer_cast<DerivedImpl>(d_Ptr); …Run Code Online (Sandbox Code Playgroud)