gpt4 book ai didi

c++ - 统一 const T& 和 T&& 重载

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

我有以下两个函数模板重载:

template<typename T>
optional<T> some(const T& x)
{
return optional<T>(x);
}

template<typename T>
typename std::enable_if<std::is_rvalue_reference<T&&>::value, optional<T> >::type
some(T&& x)
{
return optional<T>(std::move(x));
}

我第一次尝试通过完美转发统一重载失败了:

template<typename T>
optional<T> some(T&& x)
{
return optional<T>(std::forward<T>(x));
}

error: forming pointer to reference type 'const std::basic_string<char>&'

我的第二次尝试也是如此:

template<typename T>
optional<typename std::remove_reference<T>::type> some(T&& x)
{
return optional<typename std::remove_reference<T>::type>(std::forward<T>(x));
}

error: no matching function for call to
'std::basic_string<char>::basic_string(gpa::optional<const std::basic_string<char> >)'

是否有一种干净的方法来统一重载,或者我应该忍受拥有它们?

最佳答案

我不熟悉你的optional ,但也许您需要添加:

typename remove_const< ... >::type

围绕你的remove_reference在两个地方。 (因为你的 2 重载解决方案的第一个重载 - 我假设它通过了你的所有测试 - 在声明 remove_const 时有效地执行了 optional<T> )。

关于c++ - 统一 const T& 和 T&& 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10212094/

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