gpt4 book ai didi

c++ - C++ 17调用不带尖括号的模板类的静态方法

转载 作者:行者123 更新时间:2023-12-02 09:48:03 32 4
gpt4 key购买 nike

在C++ 17中,可以在声明实例时省略尖括号<>。但是为什么从模板类调用静态方法时仍需要它们呢?

#include <iostream>

using namespace std;

template<typename T = void> struct A
{
static const int i = 10;
};

int main() {
A a; // compile
int i = A::i; // does not compile
return 0;
}

最佳答案

因为语言功能(Class template argument deduction)仅处理构造对象。它基于带有构造函数和推论指南的重载解析。
对于静态数据成员,这将是一个极其有限的功能-只有将所有模板参数都默认为默认值,它才可能工作,此时您仅保存两个字符(因为A::i只能推导出为A<>::i)。
假设使用静态成员函数,它可能会更有趣(因为成员函数可以满足与构造函数相同的目的),但是它将使范围查找变得复杂,因为您必须基本上在每个范围内执行该步骤。
但是无论如何,CTAD只能与构造对象一起使用,因为那是它试图解决的问题,并且这是它唯一解决的问题。

关于c++ - C++ 17调用不带尖括号的模板类的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63418673/

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