gpt4 book ai didi

c++ - 通过引用传递时无法访问转发类型的类型别名

转载 作者:行者123 更新时间:2023-12-05 08:48:16 24 4
gpt4 key购买 nike

我的问题围绕着下面的代码:

template<typename T>
static void whatever(T&& container) {
typename T::value_type x;
std::cout << x << std::endl;
}

struct something {
using value_type = int;

const char* name;
};

int main() {
whatever(something{}); // passes by rvalue, perfectly fine.
something x;
whatever(x); // deduces the type as something& and complains ::value_type doesn't exist.
return 0;
}

现在,如果我为那个也采用引用的任何方法提供重载。

template<typename T>
static void whatever(T& container);

问题会消失,但我对这两种方法有完全相同的代码,我想知道是否有一种很好的方法可以将所有这些都放在一个方法中。

这只是我提出问题的示例代码。

最佳答案

您必须从推导的 T 类型中删除引用,例如使用 std::decay_t:

typename std::decay_t<T>::value_type x;

关于c++ - 通过引用传递时无法访问转发类型的类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66188652/

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