gpt4 book ai didi

c++ - 通过 "using"表达式缩短 std::remove_const(decltype(something))

转载 作者:行者123 更新时间:2023-11-30 05:35:09 27 4
gpt4 key购买 nike

如果我使用 C 方式,我可以执行以下操作:

#define NOCONST(x) std::remove_const<decltype(x)>::type
const int a;
NOCONST(a) b;

如果我用C++的方式

template <typename T>
using noConst = std::remove_const<T>::type;
const int a;
noConst<decltype(a)> b;

尽管“使用”更正确,但宏更短。有没有办法进一步缩短“使用”表达?模板参数中没有额外的 decltype?

为了澄清 - 我需要使用类似的东西

noConst(a) b;

noConst<a> b;

在参数中没有 decltypes 和其他东西。 decltype 应该以某种方式移动到“使用”表达式,但我不知道这如何或是否可能。

最佳答案

我认为这是不可能的。特别是您需要的形式。在这样的函数上下文中使用类型推导是可能的:

template<typename Type>
auto no_const(Type&&) { return typename std::decay<Type>::type(); }

但这会产生这样的语法:

auto x = no_const(a);

Live demo

Diclamer:在实现中使用 std::decay 可能会对数组和其他“特殊”类型产生奇怪的结果;我没有测试过;这只是一个原型(prototype)。

我不得不说,我强烈反对使用它,因为它确实是非惯用的 C++。只需键入那些额外的字符并在对象声明中使用 decltype

关于c++ - 通过 "using"表达式缩短 std::remove_const(decltype(something)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33975007/

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