gpt4 book ai didi

c++ - 用于查找参数是否为类的不同模板语法

转载 作者:可可西里 更新时间:2023-11-01 15:59:10 26 4
gpt4 key购买 nike

阅读时this question ,我遇到了@Johannes的答案。

template<typename> struct void_ { typedef void type; };

template<typename T, typename = void> // Line 1
struct is_class { static bool const value = false; };

template<typename T>
struct is_class<T, typename void_<int T::*>::type> { // Line 2
static bool const value = true;
};

此构造查找是否 given type is a class or not .令我困惑的是用于编写这个小型元程序的新型语法。谁能详细解释一下:

  1. 为什么我们需要 1 号线?
  2. 句法是什么意思 <int
    T::*>
    作为template行参数2 ?

最佳答案

第 1 行:如果测试成功,则选择下面的偏特化。

第 2 行:int T::*仅在 T 时有效是类类型,因为它表示成员指针。

因此,如果有效,void_<T>::type产量 void , 选择此部分特化以使用 value 进行实例化的 true .如果T不是类类型,那么由于 SFINAE,这种部分特化不在画面中,它默认返回到带有 value 的通用模板的 false .

每次你看到 T::SOMETHING , 如果 SOMETHING不存在,无论是类型、数据成员还是简单的指针定义,您都可以使用 SFINAE。

关于c++ - 用于查找参数是否为类的不同模板语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543652/

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