这就是我要打结(失败)的原因。这个想法是package multipleEmployeeData;
import java.util.Scanner;
public class MultipleEmployeeData extends EmployeeDetail{
static EmployeeDetail[] emp=null;
public static void empDataoutput() {
System.out.println("Employee Database: ");
System.out.println("EmployeeName"+"\t"+"EmployeeNumber"+"\t"+"EmployeeSalary"+"\t"+"EmployeeMobileNumber");
for(int i=0;i<3;i++ ) {
System.out.print(emp[i].EmpName+"\t"+emp[i].EmpNumber+"\t"+emp[i].Salary+"\t"+emp[i].MobNumber);
System.out.println();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scn=new Scanner(System.in);
emp=new EmployeeDetail[3];
for(int i=0;i<3;i++) {
System.out.println("Enter the employee "+(i+1)+" name");
emp[i].EmpName=scn.nextLine();
System.out.println("Enter the employee "+(i+1)+" number");
emp[i].EmpNumber=Integer.parseInt(scn.nextLine());
System.out.println("Enter the employee "+(i+1)+" Mobile number");
emp[i].MobNumber=Long.parseLong(scn.nextLine());
System.out.println("Enter the employee "+(i+1)+" Salary");
emp[i].Salary=Float.parseFloat(scn.nextLine());
}
scn.close();
empDataoutput();
}
}
class EmployeeDetail{
String EmpName;
int EmpNumber;
Float Salary;
Long MobNumber;
}
必须等于count<N>
。这是更复杂的计算的简化案例,不要介意这段代码的明显愚蠢。
N
无法编译:
template <>
constexpr size_t count<0> = 0;
template <auto N>
constexpr size_t count = 1 + count<static_cast<size_t>(N) - 1>;
int main()
{
return count<1>;
}
如果我将一般情况与专业化互换,那么它也不会编译。甚至可以使用变量模板吗?
答案 0 :(得分:9)
以下是正确的代码版本:
template <auto N>
constexpr size_t count = 1 + count<static_cast<size_t>(N) - 1>;
template <>
constexpr size_t count<static_cast<size_t>(0)> = 0;
观察以下内容:
count<0>
和count<static_cast<size_t>(0)>
不同,因为它们的参数具有不同的类型。在原始代码中,在其中提供了显式专门化count<0>
的情况下,如在主模板定义中指定的,在count<1>
中发生的递归未使用该专门化,这就是发生无限递归的原因。 / li>