gpt4 book ai didi

c++ - 为什么需要void_t检查成员类型的存在?

转载 作者:太空狗 更新时间:2023-10-29 19:38:32 26 4
gpt4 key购买 nike

当从Barry's answer读取Check if a given type has a inner template rebind时,我想:

为什么我们完全需要void_t

为什么以下不起作用

#include <iostream>

template <typename X, typename Y = X>
struct has_rebind : std::false_type {};

template <typename X>
struct has_rebind<X, typename X::template rebind<int>> : std::true_type {};

struct A { };
struct B { template <typename > struct rebind { }; };

int main() {
std::cout << has_rebind<A>::value << std::endl;
std::cout << has_rebind<B>::value << std::endl;
}

输出
0
0

demo

最佳答案

在这些行中:

template <typename X, typename Y = X>
struct has_rebind : std::false_type {};

template <typename X>
struct has_rebind<X, typename X::template rebind<int>> : std::true_type {};

默认类型( X)和您提供的用于特化的类型( typename X::template rebind<int>)必须为同一类型。由于void是一个很好的“默认伪类型”,因此通常将其用作默认类型,并且我们使用 void_t更改特化中提供的任何内容

关于c++ - 为什么需要void_t检查成员类型的存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31745818/

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