使函数返回指向类中函数的指针(C ++)

时间:2016-04-13 12:10:48

标签: c++ c++11

我在这里找到了这个问题,但现在我想扩展它。所以我在一个文件中有以下类,它可以正常工作:

typedef int (*fptr)();

int f1() {
    return 1;
}

int f2() {
   return 2;
}




fptr f( char c ) {
    if ( c == '1' ) {
        return f1;
    }
    else {
        return f2;
    }
}

但是当我想在另一个文件中移动这些函数并从中创建一个工厂时,我得到一个我无法理解的错误。

就像这样:

部首:

public class Factories{
   public:
     int f1();
     int f2();
}

CPPFile:

int f1() {
    return 1;
}

int f2() {
   return 2;
}

部首:

public class FactoryClass{
   public:
     fptr f( char c );
}

CPPFile:

typedef int (*fptr)();
fptr f( char c ) {
    if ( c == '1' ) {
        return Factories::f1;
    }
    else {
        return Factories::f2;
    }
}

这里在这个FactoryClass函数的返回中我得到错误"返回值类型与函数类型"不匹配。 任何想法都将不胜感激。

3 个答案:

答案 0 :(得分:2)

Factories::f1不是正常函数,它是成员函数。由于它是一个成员函数,因此需要指向调用它的对象,以便它可以影响该实例。这意味着成员函数的类型包括从中调用它的对象类型,因此指向f1的指针实际上具有类型

int (Factories::*)()

您必须要fptr

typedef int (Factories::*fptr)();

或使函数static成为常规函数。

答案 1 :(得分:1)

你要返回的成员函数Facotires :: f1只是签名错误。如果可能,使它们(f1和f2)静止。如果没有,请绑定相应的类实例(使用boost :: bind或std :: bind)

答案 2 :(得分:1)

将函数类型放入类中时,函数类型已更改。新类型应为typedef int (Factories::*fptr)();

C++: Calling member function via pointer