gpt4 book ai didi

c++ - "nicer"替代局部变量名称前缀?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:08 24 4
gpt4 key购买 nike

在我正在编写的一堆代码中,我想指出某些变量将以某种方式使用,或者它们具有某种特征。为了便于讨论,假设变量可以是甜的、咸的、酸的或苦的。

我现在用的是这样的:

int foo() {
int salty_x;
int sour_y;
do_stuff_with(salty_x,sour_y);
}

我可能还有 sour_xsalty_y

理想情况下——但这不是有效的 C++——我本来可以这样写的:

int foo() {
namespace salty { int x; }
namespace sour { int y; }
do_stuff_with(salty::x,sour::y);
}

这将很好地允许在同一个函数中使用“sour x”和“salty x”——如果这种语法当然有效的话。

这可能会让你想起Hungarian Notation ,除了它与变量类型或大小无关,而且咸味或酸味等不是 x 或 y 中固有的 - 它们仅描述了它们的使用方式。

现在,您可能会问:“好吧,为什么不把它们放在 struct 中呢?”,也就是说,为什么不这样做:

int foo() {
struct { int x; } salty;
struct { int y; } sour;
do_stuff_with(salty.x,sour.y);
}

但这排除了定义额外的咸味/酸味变量的可能性;如果我将它们全部放在函数的开头,C 风格,那么看起来好像我表明变量是相关的,但事实并非如此。

我目前所做的只是为名称添加前缀:salty_xsour_y。它很丑陋,但它有效。

我的问题:还有什么我可以做的,在使用中看起来更接近我想要的代码,同时不需要太多的“编码体操”吗?


由于流行的需求:作为一个激励/具体化的例子,“salty”可能意味着“在 GPU warp 中的所有线程中是统一的,但可能不是在不同的 warp 中”,而“sour”可能意味着“在所有线程中是统一的”当他们到达代码中的这一点时,在 CUDA 内核网格 block /OpenCL 工作组中”。但这不是关于 GPU、CUDA 或 OpenCL 的问题。

最佳答案

最难的约束是

Sometimes I even want to have a "sour x" and a "salty x" in the same function

所以 - 解决方案是我第一次使用可变参数模板模板参数 - 所以,你在这里:

template <typename T>
struct salty
{
T salty;
};
template <typename T>
struct sour
{
T sour;
};

template <typename T, template <typename> class ...D>
struct variable : D<T>...
{};

以及用法:

salty<int> x;
x.salty = 5;

variable<int, salty, sour> y;
y.sour = 6;
y.salty = 5;

关于c++ - "nicer"替代局部变量名称前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478066/

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