gpt4 book ai didi

C++ 隐式地将平凡可构造的结构转换为成员

转载 作者:行者123 更新时间:2023-11-30 04:52:28 25 4
gpt4 key购买 nike

我觉得这不太可能,但我想看看一个函数是否可以从一个简单包装的结构中推断出它的参数。例如:

struct wrapped_float
{
float f;

wrapped_float(float f) : f(f) {}
};

float saxpy(float a, float x, float y)
{
return a * x + y;
}

int main()
{
wrapped_float a = 1.1, x = 2.2, y = 3.3;

auto result = saxpy(a, x, y); // ofc compile error
}

这背后的动机是围绕具有设备上下文句柄 (HDC) 的 GDI 调用创建一个轻量级包装器。存在许多使用 HDC 的遗留代码,我想逐步重构大量此类代码。我的策略是像这样围绕 HDC 制作一个轻量级包装器:

#include <Windows.h>

struct graphics
{
HDC dc;

graphics(HDC dc) : dc(dc) {}

void rectangle(int x, int y, int w, int h)
{
Rectangle(dc, x, y, x + w, y + h);
}
};

void OnPaint(HDC dc)
{
Rectangle(dc, 1, 2, 3, 4);
}

int main()
{
HDC dc;
// setup dc here
graphics g = dc;

OnPaint(g);
}

这样如果 g 可以隐式转换为 HDC,那么所有遗留代码将正常编译,但我可以慢慢重构代码,使其成为这样:

void OnPaint(graphics g)
{
g.rectangle(1, 2, 3, 4);
}

也欢迎任何建议,因为这在 C++(或任何编程语言)中可能根本不可能。

最佳答案

从评论中,我不知道 C++ 有转换运算符。简单的解决方案是添加:

struct graphics
{
HDC dc;

graphics(HDC dc) : dc(dc) {}

void rectangle(int x, int y, int w, int h)
{
Rectangle(dc, x, y, x + w, y + h);
}

operator HDC()
{
return dc;
}
};

关于C++ 隐式地将平凡可构造的结构转换为成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357120/

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