gpt4 book ai didi

c++ - SFINAE 的类型名称关键字

转载 作者:行者123 更新时间:2023-12-02 17:18:47 26 4
gpt4 key购买 nike

我正在研究现代 C++ 中的 SFINAE,我看到了以下代码:

#include <iostream>

struct Bar
{
typedef double it;
};

template <typename T>
typename T::it Foo(const T& arg_f) {
std::cout << "Foo<T>" << std::endl;
return 0;
}

int Foo(int i) { std::cout << "foo(int)" << std::endl; return 0; }

int main(int argc, const char* argv[])
{
Foo(Bar());
Foo(0);

return 0;
}
  1. 为什么在这段代码中,开发人员使用类型名 T::it?
  2. 该类型名称与 Bar 的结构有何关系?因为它变量只是在 bar 结构中定义,但它在结构之外用于函数声明。
  3. SFINAE 到底是什么?

最佳答案

此处使用关键字typename,因为您正在访问模板类型参数的类型成员。

除了如果 TBar 那么它应该公开 it 类型成员以获得对过载。

替换失败不是错误是一种模板元编程模式,依赖于“删除”无法编译的重载

关于c++ - SFINAE 的类型名称关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650451/

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