gpt4 book ai didi

c++ - 从对象中获取值(value)

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

我想获取一个对象的值(标题太剧透了)。

那个对象可能是指针也可能不是。我正在寻找一个 STL 函数,它将成为 std::decay

的“反转对应物”

我目前的情况是这样的:

template<typename T>
typename std::enable_if<std::is_pointer<T>::value,
typename std::add_reference<typename std::remove_pointer<T>::type>::type>::type
deref(T val)
{ return *val; } // lets call it the * policy

template<typename T>
typename std::enable_if<!std::is_pointer<T>::value,
typename std::add_reference<T>::type>::type
deref(T& val)
{ return val; } // lets call it the plain policy

当然,这些在类模板中使用,其中 T 是一个参数。我故意避免使用 decltype 和 friend 们让事情在 C++03 中实现:(

有没有更好、更简洁的方法?这个解决方案会“扩展”到 C++11 && 吗?

最佳答案

只需为指针和非指针重载函数,无需使用 SFINAE 或类型特征:

template<typename T>
T& deref(T* val)
{ return *val; }

template<typename T>
T& deref(T& val)
{ return val; }

为了完美转发,只需使用转发引用和 std::forward 而不是第二个重载:

template<typename T>
T&& deref(T&& val)
{ return std::forward<T>(val); }

关于c++ - 从对象中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123829/

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