我想要这样的功能:
template<typename C, typename T>
void foo(C &&aclass, T (C::*const memberFunc)(unsigned)) {
}
参数是(因为C/C++类型语法是心智的):
MyClass
。MyClass
的成员函数的const指针,该函数接受无符号int并返回T
。但是,如果我使用l-值引用作为第一个参数调用它,则会得到如下错误:
候选模板被忽略:推导出参数'C‘('MyClass &’)的冲突类型。“MyClass”)
据我所知,它是从第一个和第二个参数中推导出C
的,但是得到了不同的推论,并且变得混乱。
根据这个答案,您可以使它只对第一个参数进行推断,并在第二个参数上以某种方式使用typename
关键字。但是,当我想让它推断参数(T
)中的一种类型,而不是另一种类型(C
)时,我无法找到这样的语法。
这个答案也很有帮助,但是他们解决这个问题的方法是完全不对C
使用引用,在这种情况下,引用是同样有效的,但在我的情况下却不是。
这个是可能的吗?
发布于 2018-02-21 06:11:23
发布于 2018-02-21 06:10:58
实际上,我刚刚发现,让一个通用的引用重载将它转发到一个l值引用版本是有效的。虽然不是特别优雅,但我觉得应该有更好的方法。
template<typename C, typename T>
void foo(C &aclass, T (C::*const memberFunc)(unsigned)) {
// Code goes here.
}
template<typename C, typename T>
void foo(C &&aclass, T (C::*const memberFunc)(unsigned)) {
foo(aclass, memberFunc);
}
https://stackoverflow.com/questions/48907948
复制