gpt4 book ai didi

c++ - 避免 `const X&` 和 `X&` 的两个版本的函数

转载 作者:行者123 更新时间:2023-11-30 04:05:47 25 4
gpt4 key购买 nike

考虑这段代码:

template<typename X>
struct Store { X x; };

template<typename X>
Store<X> store(X x) { /* a lot of code */ return Store<X>{x}; }

void foo_cr(const int& a) {
auto s = store(a);
}

void foo_r(int& a) {
auto s = store(a);
}

有没有办法修改函数store这样它就返回 Store<const int&>foo_crStore<int&>foo_r不提供 store 的两个版本对于 const X&X&


现在我的代码是这样的:

template<typename X>
Store<const X&> store(const X& x) { /* a lot of code */ return Store<const X&>{x}; }

template<typename X>
Store<X&> store(X& x) { /* a lot of code */ return Store<X&>{x}; }

函数体完全一样,我想避免重复定义。

最佳答案

以下可能是您正在寻找的内容:

template<typename X>
Store<X&> store(X& xa)
{
auto x=xa;
/* a lot of code */
return Store<X&>{x};
}

它会将 X 推导为 Yconst Y,但它会将您限制为引用。此外,auto x=xa; 将确保您在方法中获得类型为 Y 的拷贝。不确定这是否真的符合您的需求,但如果没有更多信息,很难判断。

关于c++ - 避免 `const X&` 和 `X&` 的两个版本的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137264/

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