具有模板成员函数的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:语法错误:意外的标记')',预期的'表达式”
总结中,这适用于全局和静态成员模板函数,但对于类成员模板函数,似乎需要进行前向声明。
不要介意的解决方案,包括使用一些额外的模板魔术来解决诸如此类的问题
但是该修复程序对我没有帮助。
当前试图通过不能在接口中使用实例模板功能来避免限制我的CRTP接口。
欢呼
答案 0 :(得分:2)
您必须在template
之前添加imp_f3<T>()
关键字,就像您在T_Src::template imp_f1<T>()
中所做的一样:
static_cast<T_Src*>(this)->template imp_f3<T>();
请查看this question进行解释。