[英]C++ initialization as function
我在吐槽一些旧的C ++代码。 在其中,我声明了一个局部变量,如下所示:
Pen blackPen(Color(255, 0, 0, 0));
这似乎称为构造函数。
我试图使它成为一个全局变量,我想在一个函数中初始化它。 但是,我无法以这种方式从其初始化中拆分变量。 当然,我可以定义一个全局变量
Pen blackPen;
但是现在我不知道如何初始化它:
blackPen = Pen(Color(255, 0, 0, 0));
似乎是最合理的,但出现错误:
无法访问“ Gdiplus :: Pen :: Pen(const Gdiplus :: Pen&)”(在“ c:\\ Program Files(x86)\\ Windows Kits \\ 8.1 \\ Include \\ um \\ gdipluspen.h”的第452行声明)
以下代码段显示了此行为:
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
Pen redPen;
int main(int argc, char *argv[])
{
Pen greenPen(Color(255, 0, 0, 0)); // this initialization works
redPen = Pen(Color(255, 0, 0, 0)); // but this doesn't...
return 0;
}
我试图使它成为一个全局变量,我想在一个函数中初始化它。 但是,我无法以这种方式从其初始化中拆分变量。
一种选择是通过函数提供对变量的访问。
Pen& getBlackPen()
{
static Pen pen{Color{255, 0, 0, 0}};
return pen;
}
然后,只要有函数声明,就可以访问对象。 首次调用该函数时将对其进行初始化。
更新,以回应OP的评论
另一个选择(提供的Pen
满足成为std::map
的值类型的要求):
Pen& getPen(std::string const& name)
{
static std::map<std::string, Pen> pens =
{
{"black", Pen{Color{255, 0, 0, 0}} },
{"white", Pen{Color{...}} },
{"red", Pen{Color{...}} },
// etc.
};
}
return pens[name];
}
现在,您可以使用:
Pen& pen1 = getPen("black");
Pen& pen2 = getPen("red");
我的解决方案是直接定义一个指针而不是Pen,然后使用可以从笔刷工作的构造函数:
#include <Windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
Brush *blackBrush;
Pen *blackPen;
int main(int argc, char *argv[])
{
blackBrush = new SolidBrush(Color(0, 0, 0));
blackPen = new Pen(blackBrush);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.