2011-07-14 6 views
-3

私はclass_instantiatorを持っていて、my_class aのインスタンスを内部に作成します。 aはclass_instantiatorメソッドのどれかを呼び出すことは可能ですか?class_instantiatorへのポインタを持たないのは、そのインタフェースを使用できるだけで、Boostライブラリでも可能ですか?クラス作成者とクラス・チャイルドを持つことにより、子供が実際の作成者にptrを持たない作成者関数をどのように呼び出すことができますか?

擬似コード例:

struct my_class 
{ 
    void call() 
    { 
    try{ 
    call_parent_function(instansiator_function); 
    }catch (exception &e) 
    } 
}; 

struct class_instantiator 
{ 
    void instansiator_function(){ cout << "Hello!";}; 
    void fun() 
    { 
    my_class a; 
    a.call(); 
    } 
}; 
+0

どこから派生していますか?これは2つの独立した構造体のように見えます。 –

+1

ここに親という概念はありません。他の構造体/クラスから別の構造体/クラスをインスタンス化するだけです。 –

+1

実際に達成しようとしていることを明確に説明すれば、おそらく助けになるでしょう。たぶん私たちは解決策を提案することができます。この瞬間(擬似コードでさえ)では、すべてが意味をなさない。しかし、それだけで私かもしれません。 – Bart

答えて

0
[[email protected] tmp]$ g++ parent.cpp 
[[email protected] tmp]$ ./a.out 
parent_method! 
[[email protected] tmp]$ cat parent.cpp 
#include <boost/shared_ptr.hpp> 
#include <iostream> 


class my_parent { 
    protected: 
     void parent_method() { std::cout << "parent_method!" << std::endl; } 
}; 

class my_calss : public my_parent { 
    public: 
     void call_my_parent() { my_parent::parent_method(); } 
}; 

int 
main() { 
    boost::shared_ptr<my_calss> my_ojb(new my_calss); 
    my_ojb->call_my_parent(); 
    return 1; 
} 
0

あなたは私はあなたがおそらく何か間違ったことをやっていると言うだろう(それはのように聞こえる何をしている?)、循環参照をしようとしている場合。達成しようとしている種類の具体的な例を教えてください。

子クラスは、プライベートでない限り、その親のメソッドを呼び出すことができます。

0

あなたが求めていることは100%明確ではありませんが、クラスのメンバー関数を呼び出すには、そのクラスの実際のインスタンス(オブジェクト)が必要です。しかし、あなたの関数(あなたの例ではMe :: pf())があなたのクラスの非静的メンバーデータへのアクセスを必要としないならば、関数を静的として宣言して直接呼び出すことができます。私はそれに応じてあなたの例を修正しました。また、私はそれを若干再編成したので、あなたには循環参照が書かれていることに注意してください(Helloは私の定義を見る必要があります)。

struct Hello 
{ 
    void call_static_member(); 
}; 


struct Me 
{ 
    static void pf(){ std::cout << "Hello!";} 
    void main() 
    { 
     Hello a; 
    } 
}; 

void Hello::call_static_member() 
{ 
try{ 
    Me::pf(); 
}catch (exception &e){} 
} 
関連する問題