gpt4 book ai didi

c++ - 对象构造函数 "settings"成语

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:38 26 4
gpt4 key购买 nike

我记得很久以前读过有关复杂对象配置情况下的 C++ 构造函数习惯用法。它特别有用,因为它有助于为一些讨厌的概念启用 RAII,这些概念方式太多(通常是相互冲突的)选项。

这是一个简单的例子。假设您要为 Win32 API 窗口编写一个包装器类。初始化一个窗口,需要知道窗口样式、扩展窗口样式、初始窗口位置、初始窗口大小等。窗口样式中,很多选项相互冲突,不能一起设置。将所有这些方法放在 Window 类中是令人望而却步的,并且会妨碍定义适当的类不变量。使用临时对象对所有参数值进行分组可能有助于防止不可能的配置,并为 Window 类定义一个很好的不变量(例如,它始终持有一个有效的窗口句柄)。

class Settings
{
::DWORD myBasicStyles; // takes lots of different flags.
::DWORD myExtentedStyles; // even more flags.
::POINT myInitialLocation;
::SIZE myInitialSize;
// lots more...
public:
void setInitialPosition ( int x, int y );
void setInitialSize ( int top, int left );
void useSpecialBorder ();
// lots more...
void enableTransparency ();
// lots more...
};

class Window
{
::HWND handle;
public:
// map settings unto the horrible list of many parameters expected
// by "CreateWindowEx()", then invoke it to allocate the resource.
Window ( const Settings& settings );
};

// calling code.
int main ()
{
Settings settings;
settings.setInitialPosition(0, 0);
settings.setInitialSize(500, 300);
settings.setInitiallyVisible(true);
Window window(settings);
// ... rest of application ...
}

但是,我找不到我阅读这篇文章的页面,甚至找不到调用它的名字。任何人都可以告诉我这叫做什么,并可能链接到有关该主题的良好资源吗?

最佳答案

看起来像是混合的东西。

Settings 对象是使用 Named Parameter Idiom 创建的.虽然通常您会看到它返回对自身的引用,因此您可以链接它们。

struct Builder {
Builder &one(int val) { one_ = val_; return *this; }
Builder &two(int val) { two_ = val_; return *this; }
int one;
int two;
};

void foo() {
Builder builder().one(1).two(2);
}

设置 用作 Encapsulated Context Pattern .链接有点啰嗦。基本思想是您只需将参数放在一个对象中并传递该对象。

关于一个有点相关的牢骚,我发现它封装任何东西的想法是冒犯的。不过,这可能只是人们过度解读了单词的含义。 :)

关于c++ - 对象构造函数 "settings"成语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com