如何转发声明模板实例成员函数

时间:2019-02-22 11:50:12

标签: c++ templates c++17

具有模板成员函数的CRTP接口,调用存在问题 实现模板成员函数,因为没有前向声明 模板成员函数。

IF类是接口,Src类是实现。

//view controller 1

let currentid = 5
let currentID = CurrentUser(theUser: currentid)
print(currentid)  


\\method

class CurrentUser {

    let current: Int?

    init(theUser: Int) {
        current = theUser
    }
}

可以在IF :: f1中实现静态功能接口的正常工作

但是对于IF :: f3,我会收到MSVC错误

  

“ C2760:语法错误:意外的标记')',预期的'表达式”

总结中,这适用于全局和静态成员模板函数,但对于类成员模板函数,似乎需要进行前向声明。

不要介意的解决方案,包括使用一些额外的模板魔术来解决诸如此类的问题

enter link description here

但是该修复程序对我没有帮助。

当前试图通过不能在接口中使用实例模板功能来避免限制我的CRTP接口。

欢呼

1 个答案:

答案 0 :(得分:2)

您必须在template之前添加imp_f3<T>()关键字,就像您在T_Src::template imp_f1<T>()中所做的一样:

static_cast<T_Src*>(this)->template imp_f3<T>();

请查看this question进行解释。