자주 쓰이지 않아 까먹다 보니 메모

foreach (ConsoleColor color in Enum.GetValues(typeof(ConsoleColor)))
      SLogManager.Instance.ConsoleLog(color, $"abcdefg - {color}");

 

스샷은 실행결과 색깔 보기 위한 덤.

c# 의 컨테이너(컬렉션) 중의 하나인 dictionary 에는 deep copy가 없다!

적어도 list 에는 add 나 addrange 가 있는데.

 

뭐 이건 나보다 한참 똑똑한 분들이 만든거니 이유가 있겠지.

하지만 구글링. 특히 스택오버플로우는 역시 대단해.

 

https://stackoverflow.com/questions/6050633/why-doesnt-dictionary-have-addrange

 

Why doesn't Dictionary have AddRange?

Title is basic enough, why can't I: Dictionary<string, string=""> dic = new Dictionary<string, string="">(); dic.AddRange(MethodThatReturnAnotherDic());</string,></string,>

stackoverflow.com

foreach 란걸 만들어서 복사가 되는 커스텀 연산을 만들어쓴다.

응용하면 재미난 것들을 잔뜩 만들 수 있을 것 같다.

 

아주아주 잘 돌아가는거 확인 하였고. 구글신이여 감사합니다!

//------------------------------
// 선언부
class CA
{
public:

	void Func();
};

class CB : public CA
{
public:

	using CA:Func;
	void Func( int a );
}

//-----------------------------
// 구현부

CB* pTestClass = new CB;

pTestClass->Func();
pTestClass->Func( 1 );

using CA:Func; 를 선언하지 않을 경우
pTestClass->Func(); 는 영영 사용 불가능 ㅋ.. 형변환을 해서 써야한다.
아니 그전에 함수가 없다고( 인자를 받는 함수 뿐이라고 ) 에러를 뱉어낸다.

윈도우 기반 문자열 출력은 내부에서 자체적으로 유니코드로 컨버팅을 해줘 문제가 없지만,
printf등 콘솔 명령어를 쓴다면 한글이 제대로 나오지 않는다.
한글로만 테스트를 했지만 유니코드 자체가 출력이 제대로 안되는 걸로 봐서 2바이트 문자는 전부 무리가 가는듯?

String strBuf;
strBuf.Format( "%s", strText );

printf( "%s", strBuf );

이런 코드가 있다고 하면 제대로 출력이 되지 않는다.

해결방법!

프로그램 시작하는 곳 제일 처음에 아래 한줄을 추가.
그러면 문제가 깔끔하게 해결된다.

std::locale::global( std::locale( "kor" ) );

추가하고 출력을 해보자.
제대로 나오지는 않을것이다.
printf문에서 파라메터를 %s에서 %S로 수정.

이걸로 완료.

모든것을 테스트 해보지는 않았지만 구글신이 알려주신거니 믿고 따르자. ㅎ

구조체* m_pArrStruct[MAX_COUNT_1][MAX_COUNT_2]; 라 선언되어 있는 녀석. 즉, 3차원 배열에 대한 자그마한 삽질.
( 어떠한 클래스의 멤버 변수. )

c/c++ 에서는 2차원 배열 이상은 포인터 리턴 같은 기능이 없다.( 라고 합니다.. 잘은 모르지만 다들 그렇다닌까 그런가하고 있음. )

다른 클래스에서 저 데이터를 받아오기 위해선 인자( parameter )로 받아오는 수 밖에 없다.

void get( 구조채*** pppParam )
{
*pppParam = &m_pArrStruct[0][0];         // 리턴의 기준은 2차 배열의 시작 주소.
}


구조체** ppStruct;
Class.get( &ppStruct );

ppStruct[0][0] == m_pArrStruct[0][0][0];
ppStruct[1][0] == m_pArrStruct[0][1][0];
ppStruct[2][5] == m_pArrStruct[0][2][5];

기준은 2차 배열의 주소이긴 하나, 위에서 1차 배열를 고정시켜버렸기 때문에 m_pArrStruct[1]의 주소는 나오기 힘들다.

혼자 삽질 한것이기 때문에, 태클은 자제하겠습니다~.