我一直在学习如何使用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)