gpt4 book ai didi

c++ - template 是什么意思?

转载 作者:行者123 更新时间:2023-12-04 11:24:28 25 4
gpt4 key购买 nike

我正在阅读这个史前元程序示例来检测一个类是否支持成员查找。 (或任何其他成员)。

template<typename T>
class DetectFind
{
struct Fallback { int find; };
struct Derived : T, Fallback { };

template<typename U, U> struct Check;

typedef char Yes[1];
typedef char No[2];

template<typename U>
static No& func(Check<int Fallback::*, &U::find>*);

template<typename U>
static Yes& func(...);

public:
typedef DetectFind type;
enum { value = sizeof(func<Derived>(0)) == sizeof(Yes) };
};

int main()
{
std::cout << DetectFind<std::vector<int> >::value << std::endl;
std::cout<< DetectFind<std::set<int> >::value << std::endl;
}
直觉上我确实理解这背后的目的,但如果有人让我在 10 天后从头开始写同样的东西,我可能会失败。
原因是我不完全理解这里使用的句法和语言延伸。
有人可以解释以下语法的含义吗?
  • Check<int Fallback::*, &U::find>* (我知道它试图在这里从 SFIANE 中受益,但是这是如何检测到 find 的存在的,我相信这也与第二个问题有关)
  • template<typename U, U> struct Check;

  • 程序输出 0 1 如预测;

    最佳答案

    template<typename U, U>意味着有两个模板参数:一个任意类型 U 和一个类型为 U 的未命名的非类型模板参数(例如值参数)。例如,一个 int情景将是 ClassName<int,42> .
    在您的示例中,类型 U是指向 int 的指针成员,值为int的地址成员。

    关于c++ - template<typename T, T> 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68996404/

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