gpt4 book ai didi

c++ - 如何用现代 C++ 重写这个宏?

转载 作者:行者123 更新时间:2023-11-30 04:50:03 29 4
gpt4 key购买 nike

我们的 C++17 代码库中有一个宏:

#define APOT_DEF(Type, Member) alignas(NextPow2(sizeof(Type))) Type Member

是否可以在不使用宏的情况下在现代 C++ 中实现相同的功能?

函数或函数与类型的组合是否能够完成此任务?

最佳答案

无法完美替代。问题是 alignas属性只能应用于两个地方。到(成员)变量的声明,或到类类型的声明。所以潜在的替代品可能是这样的:

template<typename Type>
struct alignas (NextPow2(sizeof(Type))) ApotDef {
Type mem;
operator Type& () & { return mem; }
operator Type const& () const& { return mem; }
operator Type&& () && { return std::move(mem); }
// Maybe for volatile?
};

因此每次出现 APOT_DEF(Type, Member)可以替换为 ApotDef<Type> Member; .这将允许 ApotDef<Type>在许多相同的地方使用Type本身可以使用,但不是替代品。在某些情况下(大多数涉及类型推导)转换为 Type glvalue 不会触发。

因此,如果成员的确切类型对您很重要,我会坚持使用宏。然而,我会稍微改变它,使声明稍微更“C++”,而不是包装 C++ 的 DSL。我会使用这个宏:

#define APOT_ALIGNED(Type) alignas(NextPow2(sizeof(Type))) Type

所以变量声明至少要有声明的形式:

APOT_ALIGNED(Type) member;

关于c++ - 如何用现代 C++ 重写这个宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55155745/

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