Я чувствую, что это маловероятно, чем нет, но я хотел бы посмотреть, может ли функция выводить свои параметры из тривиально обернутой структуры.Например:
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
}
Мотивация заключается в том, чтобы сделать легкую оболочку вокруг вызовов GDI с помощью дескрипторов контекста устройства (HDC).Существует много унаследованного кода, который использует 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, тогда весь устаревший код будет нормально компилироваться, но я могу медленно реорганизовать код, чтобы он сталthis:
void OnPaint(graphics g)
{
g.rectangle(1, 2, 3, 4);
}
Любые рекомендации также приветствуются, поскольку это может быть просто невозможно в C ++ (или любом другом языке программирования).