小编hex*_*rer的帖子

如何在使用pimpl习语时创建私有静态const字符串

背景

我一直在学习如何使用Herb Sutter在本页描述的更新的c ++ 11方法来实现pimpl习语:https://herbsutter.com/gotw/_100/

我试图通过向私有实现添加成员变量来修改此示例,特别是std :: string(尽管char*具有相同的问题).

问题

由于使用了静态const非整数类型,这似乎是不可能的.类内初始化只能对整数类型进行,但由于它是静态的,因此也无法在构造函数中初始化.

这个问题的解决方案是在头文件中声明私有变量,并在实现中初始化它,如下所示: C++ static constant string(class member)

但是,这个解决方案对我不起作用,因为它打破了我试图通过pimpl习语实现的封装.

在使用pimpl习语时,如何在隐藏的内部类中隐藏非整数静态const变量?

这是我能想出的最简单(不正确)的例子:

Widget.h:

#ifndef WIDGET_H_
#define WIDGET_H_

#include <memory>

class Widget {
public:
    Widget();
    ~Widget();
private:
    class Impl;
    std::unique_ptr<Impl> pimpl;
};

#endif
Run Code Online (Sandbox Code Playgroud)

Widget.cpp:

#include "Widget.h"
#include <string>

class Widget::Impl {
public:
    static const std::string TEST = "test";

    Impl() { };
    ~Impl() { };
};

Widget::Widget() : pimpl(new Impl()) { }
Widget::~Widget() { }
Run Code Online (Sandbox Code Playgroud)

编译命令:

g++ -std=c++11 -Wall -c …
Run Code Online (Sandbox Code Playgroud)

c++ pimpl-idiom c++11

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

标签 统计

c++ ×1

c++11 ×1

pimpl-idiom ×1