このような簡単なコードでは、かなり奇妙な動作をします。ポインタをコピーするテンプレート化されたクラスを用意するだけです:
template <typename T_out, typename Class_type, typename T_in> class C_Ololo{
public:
T_out (Class_type::*cxfunc) (T_in);
Class_type * obj_ref;
T_out getRef(T_out (Class_type::*func2) (T_in), Class_type * __obj )
{
cout << "GetRef in...1" << endl;
cxfunc=func2; // Segmentation fault
cout << "GetRef in...2" << endl;
obj_ref=__obj; // Segmentation fault
}
};
次に、前のクラスを呼び出すためのいくつかの裸のクラス:
class C_Temp{
public:
dcxArray1D /* double */ func (double a){
dcxArray1D /* double */ temp(1);
return temp;
}
void getResult(){
cout << "GetResult" << endl;
C_Ololo <dcxArray1D /* double */ ,C_Temp,double> * ololo;
ololo = new C_Ololo<dcxArray1D /* double */ ,C_Temp,double>();
ololo->getRef(&C_Temp::func,this);
}
};
dcxArray1D は次のとおりです。
typedef vector< complex<double> > dcxArray1D;
だから - 問題は、double
私が今持っているところならどこでもdcxArray1D
、私は何の問題もありません。しかし、一度使用するdcxArray1D
と、「セグメンテーション違反」と free(): ファースト クラスの無効なポインターがあります。
少しはお役に立てるでしょうか...