小编kra*_*lyk的帖子

这个设计模式是什么?如何使用它?

假设我有这样的类(简化):

class Foo_p;
class Foo
{
private:
  Foo_p *p;
public:
  Foo();
  /* methods, etc... */
};
Run Code Online (Sandbox Code Playgroud)

该类是API的一部分.Foo_p是类的所有私有部分,它们不像往常一样在类Foo本身中声明,而是在一个单独的前向声明的类中,该类仅由外部不可见的底层实现使用.

我看过这个模式在几个项目中使用过,有没有名字呢?

另外,如何正确使用它(例如异常安全等)?实际实施应该在哪里?在Foo类中,像往常一样,只使用Foo_p存储数据,或者在Foo_p类中使用Foo只是一个包装器?

c++ oop design-patterns

11
推荐指数
2
解决办法
407
查看次数

Rust:如何实现链表?

我以为我会通过改进一些非常简单的结构和算法来深入研究Rust,我开始使用链表.原来并不是那么简单.到目前为止这是我的代码:

enum List<T> 
{
    Node(T, ~List<T>),
    Nil
}

impl<T> List<T>
{
    fn new(vector: &[T]) -> List<T> { Nil }

    fn add(&mut self, item: T)
    {
        let tail = self;
        loop
        {
            match *tail
            {
                Node(_, ~ref next) => tail = next,
                Nil => break
            }
        }
        *tail = Node(item, ~Nil);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为由于不兼容的可变性,下一个不能在match语句中分配给tail.我知道这可以很容易地使用垃圾收集指针来完成,但这种做法违背了练习的教育目的:我想知道如何在没有Gc或Rc指针的情况下做到这一点.

rust

6
推荐指数
1
解决办法
2863
查看次数

我班级的建设者应该做多少工作?

我有一个表示数据流的类,它基本上读取或写入文件,但首先是数据被加密/解密,还有一个底层编解码器对象来处理被访问的媒体.

我正在尝试以RAII的方式编写这个类,我想要一个干净,漂亮,可用的设计.

困扰我的是,现在构造函数中正在做很多工作.在可以安全地使用对象的I/O例程之前,首先需要初始化编解码器(这不是非常苛刻),但是然后考虑密钥并且加密和其他事情被初始化 - 这些需要一些分析需要大量计算的媒体.

现在我在构造函数中执行所有这些操作,这需要很长时间.我正在考虑将加密初始化的东西(大多数工作)从ctor转移到一个单独的方法(比方说Stream::auth(key)),但话又说回来,这将把一些责任转移给类的用户,因为他们需要auth() 他们调用任何I/O操作之前运行.这也意味着我必须检查I/O调用以验证是否auth()已被调用.

你认为什么是好的设计?

PS我确实读过类似的问题,但我真的无法在这个案例中应用答案.他们大多喜欢"它取决于......": - /

谢谢

c++ raii

5
推荐指数
1
解决办法
723
查看次数

如何转发声明提升智能ptr?

此代码无法复制:

namespace boost
{
  template<class T> class scoped_ptr;
}

namespace FooNamespace
{

class FooClass
{
  boost::scoped_ptr<FooType> foo;
};

}
Run Code Online (Sandbox Code Playgroud)

g ++说:错误:字段'foo'的类型不完整

我认为没关系,因为我从实际的boost头文件中复制了scoped_ptr声明...我搞砸了什么?

注意:问题不在于error: field ‘foo’ has incomplete type.我试着替换它FooType无济于事......

谢谢!

c++ boost

5
推荐指数
2
解决办法
2724
查看次数

CMake正在连接图书馆的完整路径

好吧,我在CMake中有一个项目结构如下:

CMakeLists.txt
/libfoo/CMakeLists.txt
/frontend/qt/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

libfoo是一个我正在写的图书馆,frontend/qt是一个小前端,也是一个使用的例子.问题是CMake将相对路径传递libfoo.so.x给链接器而不是-l选项.Qt gui目标声明如下:

add_executable(qtgui ${qtgui_sources} ${qtgui_moced} ${qtgui_ui_h})
target_link_libraries(qtgui ${QT_LIBRARIES} foo)
Run Code Online (Sandbox Code Playgroud)

我宁愿它只是链接-lfoo像所有其他库,而不是完整的路径.怎么做?

谢谢!

build cmake

5
推荐指数
1
解决办法
4321
查看次数

C++:在C中传递指向模板类的指针

我正在为我的lib编写一个C包装器API.

我通常像void*在C中那样传递我的C++对象.并且每个对象的公共函数都有自然的访问包装函数.C代码访问本机C++类成员.

昨天,有人在IRC上提到我不应该像C中那样传递指向C++模板类的指针,void*因为它很危险.这是真的?从指针到模板类的指向普通C++类的指针有何不同?

谢谢!

c c++ templates wrapper

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

Matlab:没有匿名函数输出的调用函数

我想从匿名函数中调用某个函数,如

@(){fooBar(baz)}
Run Code Online (Sandbox Code Playgroud)

麻烦的是,fooBar没有输出,这使得匿名函数抱怨.除了使fooBar函数返回虚拟输出之外,有没有办法解决这个问题?

matlab lambda

0
推荐指数
1
解决办法
117
查看次数

标签 统计

c++ ×4

boost ×1

build ×1

c ×1

cmake ×1

design-patterns ×1

lambda ×1

matlab ×1

oop ×1

raii ×1

rust ×1

templates ×1

wrapper ×1