尝试使用递归的常规方法扩展包:
template<bool first> int func1(int value = 0) {
return some_func(first, value);
}
template<bool first, bool... args> int func1(int value = 0) {
return func1<args...>(some_func(first, value) );
}
在编译时递归的最后一步,func1的调用是不明确的, 第一个候选人是第一个职能,它很明确,在我的案例中有一些具体的专业:
int func1(int)[with bool first = false]
但第二个是
int func1(int)[with bool first = false; bool ... args = {}]
你看到这也是正确的 - 在第一个之后的空集参数。 有什么想法防止这种情况?
谢谢
答案 0 :(得分:4)
通过添加显式second
参数,从递归案例中消除基本案例的歧义:
template<bool first> int func1(int value = 0) {
return some_func(first, value);
}
template<bool first, bool second, bool... args> int func1(int value = 0) {
return func1<second, args...>(some_func(first, value) );
}
答案 1 :(得分:0)
所以最后,我没有使用递归,而是下面的唯一代码。
(实际上std :: array不是必需的,但从我的角度来看更有用, 扩展可以通过使用类似C的数组进行存档。
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
// Read the existing entries and write to console
String qSelect = "SELECT d.de - CURRENT_Date as newde FROM Deinfo d ";
Query q = em.createQuery(qSelect);