작업중인 API의 경우 사용자가 ostream
에 사용자 지정 개체를 삽입 할 수 있지만이 개체는 의미가 없으며 너무 많은 메모리입니다 컨텍스트에 대한 추가 포인터 또는 참조를 포함하도록 제한됩니다.C++ ostream 삽입 연산자에서 컨텍스트를 사용할 수 있도록 설정해야합니다.
사용자가 기본 컨텍스트를 초기화 가정 (. 제한된 메모리와 임베디드 시스템에서 수만 16/32/48 비트 오브젝트의 수백만의 생각), 이러한 개체 중 하나 조회 :
DDB ddb("xc5vlx330t");
Tilewire tw = ddb.lookUpTilewire("DSP_X34Y0", "DSP_IMUX_B5_3");
...
std::cout << complexDataStructure;
완전히 다른 범위에서 사용자의 명시 적 코드에서 멀리 중첩되어있을 수 있으므로 ddb
을 사용할 수없는 경우 ostream
에 개체를 삽입해야 할 수 있습니다. TW 캡슐화
os << tw;
실제 값은 97,594,974
이지만, 원하는 출력이있다 :
ddb
에 액세스 할 필요가 있지만, 그렇지 캔
[email protected][263,84] DSP "DSP_X34Y0" ([email protected])
정적 또는 전역 변수 또는 함수 (멀티 스레딩 이유로)에 의존합니다. 내가 뭘 같은 을 거라고하는 요청에 사용자를 허용하고 같은 종류의 스트림 래퍼를 사용할 수 있습니다 : ostream에의 반환 서브 클래스는 특별한 스트림 삽입 기에서 사용할 DDB에 대한 참조를 포함 할 것
ostream& wrappedCout = ddb.getWrappedOstream(std::cout);
그 그것을 필요로하고 원본 스트림에 대한 참조는 — std::cout
이 경우에는 —인데 모든 출력을 전달합니다.
불행히도, 제가 상상해 보았던 상속 또는 구성 계획은 코드 작성 (엄청난 관심사가 아닌)에 문제가 될 수 있으며 사용자에게는 더 큰 관심사가 될 수 있습니다. 우아하게 ddb를 삽입 연산자에 사용할 수있게하는 방법에 대한 제안? 나는 약간 부스트를 알고있다. 유풍은 여기에서 나를 도울 것이라고 확신하지 못한다.
스레드 로컬 저장소를 사용할 수 없습니까? 스레딩에 관심이 있으니 일종의 스레드 로컬을 제공하는 스레딩 라이브러리가있을 것입니다. – doublep
스레드 로컬 저장소는 흥미로운 아이디어이지만 일반적으로 동일한 스레드 내에서 여러 DDB 개체가 공존 할 수 있으므로 컨텍스트를 스트림으로 래핑하는 것이 좋습니다. –