C 初始化为函数

C++ initialization as function

本文关键字:函数 初始化      更新时间:2023-10-16

我正在通过一些旧的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文件(x86) Windows kits 8.1 include um um um 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");

我的解决方案是定义指针而不是直接的笔,然后使用从刷子工作的构造函数:

#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;
}