Visual Studio 정규표현식 찾기/바꾸기

프로그래밍/기타

Visual Studio 로 작업할 때, 가끔 찾기/바꾸기 기능에서 정규표현식을 이용할 수는 없을까? 라는 생각을 종종 했었다.

 

패턴이 눈에 보이는데, 단순 문자열로 찾기/바꾸기로는 수정이 곤란한 경우라던지...

 

그런데 실제로 Visual Studio 에서 정규표현식을 지원하고 있다.

 

기본적인 정규식은 다 똑같고, 캡처 그룹의 경우에는 $n 으로 표기한다.(숫자는 1부터 시작)

 

위는 아래의 코드의 campLevelUpString[n] 배열을 함수의 형태인 GetCampLevelUp(n) 로 바꿔준다.

 

1
string text = campLevelUpString[0+ "\n" + campLevelUpString[10+ "\n" + campLevelUpString[13];
cs

 

1
string text = GetCampLevelUp(0+ "\n" + GetCampLevelUp(10+ "\n" + GetCampLevelUp(13);
cs

 

이는 어디까지나 예시이고, 정규표현식을 사용해서 더 다양하게 찾기/바꾸기를 사용할 수 있다.

 

https://docs.microsoft.com/ko-kr/visualstudio/ide/using-regular-expressions-in-visual-studio?view=vs-2019

C++ Enum의 전방 선언

프로그래밍/C++

C++11 기준으로 현재 enum은 기존의 enum과, C++11에 추가된 enum class의 2가지의 타입이 존재한다.

 

unscoped enum

 

1
2
3
4
5
6
enum A : int
{
    first = 0,
    second,
    third
};
cs


scoped enum

 

1
2
3
4
5
6
enum class B : int
{
    first = 0,
    second,
    third
};
cs

 

이전까지 enum은 전방 선언이 되지 않았지만, C++11부터는 전방 선언이 가능하도록 바뀌었다. 그 이유가, 기존의 enum에 어떤 값이 들어있는지 알 수 없으면 그 크기를 정할 수가 없었기 때문이다.

enum class는 타입을 명시하지 않으면 int 타입으로 선언되기 때문에 크기가 명확해짐으로써 전방 선언이 가능하게 되었다.

 

 

따라서, unscoped enum의 경우에는 타입을 선언해야, scoped enum은 타입을 선언하지 않아도 전방 선언이 가능하다.

 

VS2017에서 테스트를 해 보았다.

 

TestEnum.h

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#pragma once
 
enum AEnum
{
    first = 0,
    second,
    third
};
 
enum class BEnum
{
    first = 0,
    second,
    third
};
 
enum AIEnum : int
{
    first_i = 0,
    second_i,
    third_i
};
 
enum class BIEnum : int
{
    first = 0,
    second,
    third
};
 
enum EEnum
{
    first_e,
    second_e,
    third_e
};
cs

 

TestClass.h

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
 
enum AEnum;
enum class BEnum;
enum AIEnum;
enum class BIEnum;
enum EEnum;
 
class TestClass
{
private:
    AEnum a;
    BEnum b;
    AIEnum ai;
    BIEnum bi;
    EEnum ee;
 
public:
    TestClass();
    ~TestClass();
};
cs

 

위와 같은 코드로 빌드를 해보면...

 

 

잘만 된다. VS가 뭔가 이상한것 같아서 g++로 다시 컴파일을 해봤다.

 

 

g++로 컴파일 하면 에러를 뱉어낸다. 즉, 표준 C++11 문법에서는 타입을 선언하지 않은 unscoped enum의 경우에는 전방 선언이 안되는게 맞다.

게임을 위한 Windows와 DirectX SDK 블로그

프로그래밍/DirectX

https://walbourn.github.io/

 

Games for Windows and the DirectX SDK blog

Technical tips, tricks, and news about game development for Microsoft platforms including desktop, Xbox One, and UWP

walbourn.github.io

 

DirectX 11을 공부하다가 찾은 블로그다. 특히 눈여겨 볼만한 게시글은 Living without D3DX 이다.

 

DirectX를 튜토리얼이나 책으로 처음 시작하게 되면 대부분 D3DX를 사용해서 구현하게 된다. 유용하고 편의성을 위한 기능들이 많기는 하지만, Windows SDK가 나오면서 DirectX SDK가 Windows SDK 쪽으로 흡수되고 D3DX를 비롯한 여러 라이브러리의 지원도 끊겼다.

 

그때 당시에는 어쩔 수 없이 썼을지 몰라도, 2019년이나 된 지금에 와서도 이걸 쓰기엔 좀... 여러 가지 문제로 어떻게 사용하지 않고 개발하는 방법이 없을까 하다가 찾게 되었다.

 

D3DX를 사용하지 않고 다른 라이브러리와 함수로 대체가능한 리스트들을 보여준다. HLSL의 경우에는 D3DCompile, 수학 계산의 경우에는 DirectXMath로 대체가 가능하다.

다만, 모든 기능을 대처할 수는 없었는지 일부 기능들은 DirectX Tool Kit과 같은 새로운 라이브러리를 만들어서 새로이 구현되어있다.

 

지원이 끊겨서 더 이상의 업데이트가 없는 D3DX와는 달리, 현재까지 계속적으로 업데이트가 되고 있으므로 충분히 믿을만하다.