相关疑难解决方法(0)

指向成员函数的函数指针

我想将一个函数指针设置为一个类的成员,该类是指向同一个类中另一个函数的指针.我这样做的原因很复杂.

在这个例子中,我希望输出为"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)

但这在编译时失败了.为什么?

c++ oop function-pointers

78
推荐指数
5
解决办法
9万
查看次数

参数包必须位于参数列表的末尾...何时以及为何?

如果参数列表必须位于参数列表的末尾,如果后者绑定到类,则不会得到参数列表的原因,如果参数列表是成员方法声明的一部分,则放宽约束.

换句话说,这个编译:

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'必须位于模板参数列表的末尾

所以,我只是很好奇地完全理解为什么它在某些情况下被接受,但它不在其他一些情况下.

是一个类似的问题,但它只是解释了如何解决问题,这对我来说非常清楚.

c++ templates variadic-templates c++11

26
推荐指数
2
解决办法
3720
查看次数