【发布时间】:2019-08-12 12:14:26
【问题描述】:
我有一个结构定义为:
struct Foo
{
double x;
double y;
};
我有一个将此结构作为参数的函数:
void doSomethingWithFoo(Foo foo);
我也想通过直接传递结构成员来使用这个函数:
void doSomethingWithFoo(double x, double y);
有没有一种方法可以使用std::allocator_traits::construct 或任何其他方法来实现,而无需明确定义第二个函数?
【问题讨论】:
-
不清楚你为什么认为你需要
std::allocator_traits。问题真的只是:“如何将void doSomethingWithFoo(Foo foo);称为doSomethingWithFoo(x,y);”,对吗? -
vector::emplace的文档提到“通过调用 allocator_traits::construct 并转发参数来就地构造元素。” -
..但是你的代码中没有向量
-
std::vector::emplace的文档为想要提供自己的分配器的人提到了这一点。但是分配器并不是专门用于从参数构造对象,而是用于管理内存分配(顾名思义)。如果您不想控制内存分配,则不需要分配器。基本上,std::vector::emplace涉及做 X 和 Y,文档中提到了 Y(所以您询问 Y),但您真正想要/需要的方面是 X。另请参阅 XY problem。 -
您能否详细说明您的真正问题涉及什么?你有很多不同的类(你只展示一个),这应该适用吗?还是
Foo有很多构造函数?如果两者都不是,你希望通过这样做而不是仅仅打电话给doSomethingWithFoo({x, y});获得什么?
标签: c++ function struct arguments parameter-passing