나는 다음과 작은 도서관 쓰고 피하기 위해 구조체에 숫자를 포장의 단점 :장점과 암시 적 변환
using foo_t = int;
using bar_t = int;
baz_t create_baz(foo_t foo, bar_t bar = default_bar);
와 나는 또한 단지 줄을 취하는 create_baz
기능을 갖고 싶어를 :
baz_t create_baz(bar_t bar);
하지만 그 create_baz의 부도 첫 번째 버전과 충돌합니다 - foo_t
이후 및 bar_t
은 동일합니다. 그래서, 나는 생각했다 : 아마도 나는 종류가 다른, 심지어는 호환되지 않는, 그리고 수 있도록
struct foo_t { int value; }
struct bar_t { int value; }
(또는 구조체에 그들 중 하나를 포장), 내가 가지고있을거야해야 두 번째 create_baz
그 .
구조체는 사용하기가 쉽지 않습니다. 그러나이 결정에 대해 고려해야 할 다른 장단점이 있습니까?
내 질문은 주로 C++에 관한 것이지만 C 언어와 관련이있다 (첫 번째 함수의 두 번째 매개 변수는 무시한다).
비슷한 대답을 할 필요가 없었기 때문에 대답이 없었습니다. 구조체를 사용하면 불편하지 않아서'x = foo;'또는'x = foo.value; '를 쓰지 않습니다. 큰 차이를 만들어라. 그리고 코드를 명확하게 만들려면'auto & v = foo.value; '를 사용할 수 있습니다. 구조체를 도입 한 이유를 문서화하십시오. – stefaanv
구조체를 사용하여 서로 다른 유형의 'int'값을 구분할 수 있습니다. 그러나 C에는 이름 변환이 없으므로 함수 오버로딩이 없으므로 관계없이 다른 함수 이름이 필요합니다. –
'strong typedef'는 우리가 가지고 있지 않은 것입니다. 하지만 당신은 언제나 어떤 사용자 태그를 취하고'operator int'를 정의하는 래퍼'IntClass'를 생성 할 수 있습니까? – Arunmu