gpt4 book ai didi

C++:可以编写忽略 const 赋值的代码吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:04 25 4
gpt4 key购买 nike

我正在编写宏以减少框架中的编码,但遇到了用户可以选择输入 const 限定符的问题。问题是稍后可能会尝试将宏值分配给该值。如果参数是常量,我希望忽略赋值。

下面的简单宏演示了我的反对意见:

#define DECLARE_AND_ASSIGN(type, param, init_val, later_val) \
type param = init_val; \
param = later_val;

以下工作正常:

DECLARE_AND_ASSIGN( int, foo, 0, 42 )

但这显然不会编译,因为在初始化后分配了一个 const:

DECLARE_AND_ASSIGN( const int, bar, 0, 42 )

有没有办法对宏进行编码,以便编译器忽略分配的 const 值? (在 VS2017 上用 C++ 编码)

最佳答案

你可以用这样的助手来包装作业:

template <class T, class A>
void assignNonConst(T &v, A &&a)
{
v = std::forward<A>(a);
}

template <class T, class A>
void assignNonConst(const T&, A&&)
{}

#define DECLARE_AND_ASSIGN(type, param, init_val, later_val) \
type param = init_val; \
assignNonConst(param, later_val);

这样,当param 是非const 类型时,会调用第一个模板重载并进行赋值。当 paramconst 时,选择第二个重载并且什么都不做。

关于C++:可以编写忽略 const 赋值的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419326/

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