2017-02-18 8 views
-3

저는 C++을 처음 접했을 뿐이므로 C++의 연습 교재를보고 있으므로 클래스를 사용해야하는 흥미로운 문제를 발견했습니다. 나는 해결책을 알아 냈다. 그러나 Javascript로 쓰는 것처럼 나의 해결책은 쓰여졌다. 그래서 C++로 작성하기 시작했는데 가능한지, 그렇다면 클래스의 멤버를 다른 클래스의 객체로 동적으로 만드는 방법을 알지 못합니다. 자바 스크립트에서 이 작업은 생성자에서 수행하십시오.다른 멤버 내에서 클래스 멤버를 동적으로 추가하십시오.

function AConstructor() { 
    this.method = function() { 
    this.property = new OtherConstructor() 
    } 
    } 

C++에서 가능합니까?

+3

짧은 대답은 다음과 같습니다. C++은 이런 식으로 작동하지 않습니다. –

+0

에뮬레이트하기 위해'std :: map >'을 데이터 멤버로 사용할 수 있습니다. – skypjack

+0

어쩌면이 기능을 수행하는 데 사용할 수있는 트릭이나 해킹이있을 수 있습니다. –

답변

0

예, 그렇지만 실제로는 작동하지 않습니다. std::function<void()>은 오버로드 된 () 연산자가있는 개체입니다. Btw는 this이 포인터이므로 참조가 아니므로 -> 회원이 아니고 . 연산자에 액세스 할 수 있습니다.

#include <iostream> 
#include <functional> 

class C { 
private: 
    std::function<void()> default_method = []() { std::cout << "X"; }; 

public: 
    std::function<void()> method = default_method; 

    void change_method() { 
     method = []() { std::cout << "Y"; }; 
    } 
}; 

int main() { 
    C object; 
    object.method(); 
    object.change_method(); 
    object.method(); 

    return 0; 
} 

XY이 인쇄됩니다.