相关疑难解决方法(0)

为什么函数指针定义适用于任意数量的&符号'&'或星号'*'?

为什么以下工作?

void foo() {
    cout << "Foo to you too!\n";
};

int main() {
    void (*p1_foo)() = foo;
    void (*p2_foo)() = *foo;
    void (*p3_foo)() = &foo;
    void (*p4_foo)() = *&foo;
    void (*p5_foo)() = &*foo;
    void (*p6_foo)() = **foo;
    void (*p7_foo)() = **********************foo;

    (*p1_foo)();
    (*p2_foo)();
    (*p3_foo)();
    (*p4_foo)();
    (*p5_foo)();
    (*p6_foo)();
    (*p7_foo)();
}
Run Code Online (Sandbox Code Playgroud)

c c++ function-pointers

204
推荐指数
2
解决办法
1万
查看次数

函数类型可以是类模板参数吗?

下面的代码被VC++ 2012拒绝,"错误C2207:'A :: bar':类模板的成员无法获取函数类型".

int Hello(int n)
{
    return n;
}

template<class FunctionPtr>
struct A
{
    A(FunctionPtr foo)
        : bar(foo)
    {}

    FunctionPtr bar;
};

int main()
{
    A<decltype(Hello)> a(Hello);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ templates c++11

16
推荐指数
2
解决办法
3644
查看次数

将函数名称作为函数的参数传递

是否可以将函数的名称(比如A)作为参数传递给另一个函数(比如说B),然后从函数B中调用函数A.即函数名将存储在B中的变量中,并使用它调用名称在变量中的函数.例如,在C++排序函数中,第一个和第二个参数是迭代器,但第三个参数是函数的名称.

c++ parameter-passing function-calls

5
推荐指数
3
解决办法
9566
查看次数