小编Yoh*_*Yoh的帖子

ess-rdired:我收到此错误"现在没有ESS进程与此缓冲区关联"

要使用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在更改对象时更新对象的信息吗?

emacs r ess

8
推荐指数
1
解决办法
1122
查看次数

使用智能指针继承的pimpl

请参阅我继承的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)

c++ inheritance pimpl-idiom

2
推荐指数
1
解决办法
1507
查看次数

标签 统计

c++ ×1

emacs ×1

ess ×1

inheritance ×1

pimpl-idiom ×1

r ×1