我想将一个函数指针设置为一个类的成员,该类是指向同一个类中另一个函数的指针.我这样做的原因很复杂.
在这个例子中,我希望输出为"1"
class A {
public:
int f();
int (*x)();
}
int A::f() {
return 1;
}
int main() {
A a;
a.x = a.f;
printf("%d\n",a.x())
}
Run Code Online (Sandbox Code Playgroud)
但这在编译时失败了.为什么?
如果参数列表必须位于参数列表的末尾,如果后者绑定到类,则不会得到参数列表的原因,如果参数列表是成员方法声明的一部分,则放宽约束.
换句话说,这个编译:
class C {
template<typename T, typename... Args, typename S>
void fn() { }
};
Run Code Online (Sandbox Code Playgroud)
以下不是:
template<typename T, typename... Args, typename S>
class C { };
Run Code Online (Sandbox Code Playgroud)
为什么第一种情况是正确的,第二种情况不是?
我的意思是,如果它是合法的语法,那么在这两种情况下都不应该这样吗?
要清楚,真正的问题是我正在定义一个类似于下面的类:
template<typename T, typename... Args, typename Allocator>
class C { };
Run Code Online (Sandbox Code Playgroud)
将分配器类型作为最后一种类型将不胜感激,但我可以以某种方式解决它(无论如何,如果你有一个建议,它的赞赏,也许你的优雅比我的更优雅!).
那就是说,我收到了错误:
参数包'Args'必须位于模板参数列表的末尾
所以,我只是很好奇地完全理解为什么它在某些情况下被接受,但它不在其他一些情况下.
这是一个类似的问题,但它只是解释了如何解决问题,这对我来说非常清楚.