gpt4 book ai didi

c++ - 模板参数中未命名的类/类型名

转载 作者:行者123 更新时间:2023-12-01 19:52:43 26 4
gpt4 key购买 nike

我正在查看 SFINAE 的文档并且有这个模板声明:

template<typename SomeType>
struct inner_type { typedef typename SomeType::type type; };
template <
class T,
class = typename T::type, // SFINAE failure if T has no member type
class U = typename inner_type<T>::type // hard error if T has no member type
// (guaranteed to not occur as of C++14)
> void foo(int) {}

具体来说,我要问的是 class = typename T::type 。声明未命名的类有什么意义?

由于评论,我认为这会导致编译器错误 T没有成员(member) type ,但事实并非如此,如 foo<int, int, int>(0);编译良好。

另一方面

template<class T, typename = std::enable_if_t<std::is_unsigned<T>::value>>
void foo(T t) {}

如果 T 则无法编译已签名,并且如果 T 则编译未签名。

我在这里缺少什么?

最佳答案

foo<int, int, int>(0); compiles fine.

因为你指定了第二个模板参数,那么默认模板参数(即 typename T::type )将不会被使用,也不会触发编译错误。

如果你只是写foo<int>(0);要使用默认模板参数,编译将失败。

LIVE

您的第二个样本也是如此。

What's the point of declaring an unnamed class?

因为模板参数不会用于模板实现。

关于c++ - 模板参数中未命名的类/类型名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36298404/

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