在重组一些代码时,我在返回具有 2 个值的结构时遇到了一个“问题”。现在这些确实应该以记录的效果命名。后来我想使用tie
,所以我将结构更改为继承std::pair
并设置引用。现在这实际上工作正常,但您会注意到现在我的结构的大小为 24,而不是与这对相比只有 8。
#include <tuple>
struct Transaction : public std::pair<int, int> {
using pair::pair;
int& deducted = first;
int& transfered = second;
};
//static_assert(sizeof(Transaction) == sizeof(std::pair<int, int>));//commenting in this line will fail compilation
Transaction makeTheTransaction();
void test(int& deduct, int& transfer) {
std::tie(deduct, transfer) = makeTheTransaction();
}
可能显而易见的方法是更改为成员函数,但是对于这种情况来说,这也是太多的“样板”(然后它会变得更容易,tie
以后不使用)。直接的 memcpy 是例如。一个元组是直前 UB。直接结构化绑定也不可行,因为变量已经在使用中。
我的问题是,不考虑可重用部分(并且考虑到大小不应超过 2 个整数),有什么更好或最少的代码解决方案?
更新:对于这种情况,我最终只是做了一个简单的结构并暂时保留返回。对于来到这里的其他用户,有一个库提案来提升似乎能够将任何结构转换为元组:https ://github.com/apolukhin/magic_get/