auto를 사용하여 네임 스페이스 범위에서 클래스 정적 상수를 정의 할 수 있습니까?

인간 컴파일러

에서는 네임 스페이스 범위에서 정의하지 않고 정의 const static내에서 데이터 멤버 를 정의 할 수 있습니다 class. 이는 상수가 ODR을 사용하지 않는 한 유효합니다. 이 관행은 번역 단위에서 스토리지 지원을 효과적으로 제공하지 않습니다. 예를 들면 :

#include <cstddef> // std::size_t

class my_string
{
public:
    static const auto npos = static_cast<std::size_t>(-1);
};

저는 가능한 경우 거의 항상 자동 인 가이드 라인을 따라 가면서도 일반적인 타이핑을 유지하면서 일관된 왼쪽에서 오른쪽으로 가독성을 달성하는 것을 좋아합니다. 그러나 이것은 실제로 해당 기호가 ODR을 사용하기를 원하는 몇 가지 경우와 상충 됩니다. 내가 것 처럼 할 것은 :

#include "my_string.hpp"

const auto my_string::npos; // error!

그러나이 시점에서 이미 알려진 사실에도 불구하고 유형이 지정되지 않았기 때문에 C ++ 20에서도 실패decltype(my_string::npos) 합니다. 이상적으로는 상수의 유형이 변경 될 때마다 네임 스페이스 정의를 변경할 필요가 없도록하고 싶습니다.

내 질문은 다음과 같습니다. 이러한 시나리오에서 간단한 왼쪽에서 오른쪽으로 구문을 얻을 수있는 방법이 있습니까?

이 문제를 해결하기 위해 내가 생각할 수있는 유일한 두 가지 방법은 변수를 사용하여 네임 스페이스 정의를 지정 하지 않거나 사용 하여 유형 이름을 지정하는 것입니다 (추악하지만 작동 함).inlinedecltype(my_string::npos)

카밀 쿡

decltype (my_string :: npos)이 이미이 시점에 알려져 있음에도 불구하고

글쎄 .. 그냥 사용하세요!

#include <cstddef> // std::size_t
class my_string {
public:
    static const auto npos = static_cast<std::size_t>(-1);
};
const decltype(my_string::npos) my_string::npos; // all fine!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

독점적으로 정적 필드를 보유하는 클래스에만 전용 네임 스페이스의 이름을 지정할 수 있습니까?

분류에서Dev

변수를 사용하여 perl에서 특정 네임 스페이스를 설정할 수 있습니까?

분류에서Dev

네임 스페이스가 지정된 클래스 생성자에서 전역 네임 스페이스 함수를 사용할 수 없습니다.

분류에서Dev

특정 클래스에서만 사용할 수 있도록 Kotlin 인터페이스의 범위를 지정할 수 있습니까?

분류에서Dev

적절한 네임 스페이스를 추가하여 XML / SVG를 수정할 수 있습니까?

분류에서Dev

웹 양식과 동일한 네임 스페이스에있는 공용 정적 클래스를 확인할 수 없습니다.

분류에서Dev

Roslyn의 네임 스페이스에 클래스를 효과적으로 추가 할 수 없습니다.

분류에서Dev

"네임 스페이스 사용"을 사용하여 네임 스페이스에서 변수를 어떻게 정의합니까?

분류에서Dev

NSCoding 클래스에 대한 신속한 모듈 별 네임 스페이스를 재정의 할 수 있습니까? (Module1.MyCodedClass == Module2.MyCodedClass 필요)

분류에서Dev

하나의 파일에 두 개의 네임 스페이스를 어떻게 사용할 수 있습니까?

분류에서Dev

.Net은 컴파일 타임에 클래스 상수를 네임 스페이스로 설정합니다.

분류에서Dev

SFML을 사용하여 스네이크 게임에서 게임 오버를 어떻게 정의 할 수 있습니까?

분류에서Dev

Qt-클래스의 멤버 함수에서 네임 스페이스 함수를 사용할 때 LNK2019

분류에서Dev

UID 네임 스페이스에서 매핑되지 않은 UID로 setuid를 설정할 수 있습니까?

분류에서Dev

사용자 정의 네임 스페이스에 클래스를 추가하려면 어떻게합니까?

분류에서Dev

전체 WPF 애플리케이션에서 비 정적 클래스의 인스턴스를 사용할 수 있도록 할 수 있습니까?

분류에서Dev

네임 스페이스를 사용하는 C #에서 시스템 선언을 생략 할 수 있습니까?

분류에서Dev

tkinter를 사용하여 한 클래스에서 사용되는 변수를 다른 클래스에서 어떻게 수정할 수 있습니까?

분류에서Dev

단일 헤더 파일에 메서드 정의가있는 네임 스페이스 및 클래스 두 개 이상의 헤더 또는 cpp 파일에서 어떻게 사용할 수 있습니까?

분류에서Dev

QStandardItem에 사용자 정의 클래스를 추가 할 수 있습니까?

분류에서Dev

JSON / XML 속성에서 여러 네임 스페이스 구분 기호를 사용할 수 있습니까?

분류에서Dev

여러 클래스의 클래스 멤버에 대한 액세스를 제어하는 방법 (예 : 범위 폴더 / 네임 스페이스가있는 액세스 수정 자)?

분류에서Dev

Dummy를 전역 네임 스페이스에서 내 네임 스페이스로 이동할 수 있습니까?

분류에서Dev

모듈 전역 범위를 사용하여 프로토 타입에서 액세스 할 수있는 개인 클래스 필드를 정의합니다.

분류에서Dev

Kotlin에서 상속 된 클래스를 사용하여 var를 val로 재정의 할 수 있나요?

분류에서Dev

Python : 클래스 변수를 정의 할 때 어떤 범위에 액세스 할 수 있습니까?

분류에서Dev

응용 프로그램간에 .proto 파일의 네임 스페이스를 변경할 수 있습니까?

분류에서Dev

네임 스페이스가 C ++에서 추가 클래스를 추가하지 못하도록 방지 할 수있는 방법이 있습니까?

분류에서Dev

다른 클래스의 클래스에 정의 된 사용자 지정 변수를 상속 할 수 있습니까?

Related 관련 기사

  1. 1

    독점적으로 정적 필드를 보유하는 클래스에만 전용 네임 스페이스의 이름을 지정할 수 있습니까?

  2. 2

    변수를 사용하여 perl에서 특정 네임 스페이스를 설정할 수 있습니까?

  3. 3

    네임 스페이스가 지정된 클래스 생성자에서 전역 네임 스페이스 함수를 사용할 수 없습니다.

  4. 4

    특정 클래스에서만 사용할 수 있도록 Kotlin 인터페이스의 범위를 지정할 수 있습니까?

  5. 5

    적절한 네임 스페이스를 추가하여 XML / SVG를 수정할 수 있습니까?

  6. 6

    웹 양식과 동일한 네임 스페이스에있는 공용 정적 클래스를 확인할 수 없습니다.

  7. 7

    Roslyn의 네임 스페이스에 클래스를 효과적으로 추가 할 수 없습니다.

  8. 8

    "네임 스페이스 사용"을 사용하여 네임 스페이스에서 변수를 어떻게 정의합니까?

  9. 9

    NSCoding 클래스에 대한 신속한 모듈 별 네임 스페이스를 재정의 할 수 있습니까? (Module1.MyCodedClass == Module2.MyCodedClass 필요)

  10. 10

    하나의 파일에 두 개의 네임 스페이스를 어떻게 사용할 수 있습니까?

  11. 11

    .Net은 컴파일 타임에 클래스 상수를 네임 스페이스로 설정합니다.

  12. 12

    SFML을 사용하여 스네이크 게임에서 게임 오버를 어떻게 정의 할 수 있습니까?

  13. 13

    Qt-클래스의 멤버 함수에서 네임 스페이스 함수를 사용할 때 LNK2019

  14. 14

    UID 네임 스페이스에서 매핑되지 않은 UID로 setuid를 설정할 수 있습니까?

  15. 15

    사용자 정의 네임 스페이스에 클래스를 추가하려면 어떻게합니까?

  16. 16

    전체 WPF 애플리케이션에서 비 정적 클래스의 인스턴스를 사용할 수 있도록 할 수 있습니까?

  17. 17

    네임 스페이스를 사용하는 C #에서 시스템 선언을 생략 할 수 있습니까?

  18. 18

    tkinter를 사용하여 한 클래스에서 사용되는 변수를 다른 클래스에서 어떻게 수정할 수 있습니까?

  19. 19

    단일 헤더 파일에 메서드 정의가있는 네임 스페이스 및 클래스 두 개 이상의 헤더 또는 cpp 파일에서 어떻게 사용할 수 있습니까?

  20. 20

    QStandardItem에 사용자 정의 클래스를 추가 할 수 있습니까?

  21. 21

    JSON / XML 속성에서 여러 네임 스페이스 구분 기호를 사용할 수 있습니까?

  22. 22

    여러 클래스의 클래스 멤버에 대한 액세스를 제어하는 방법 (예 : 범위 폴더 / 네임 스페이스가있는 액세스 수정 자)?

  23. 23

    Dummy를 전역 네임 스페이스에서 내 네임 스페이스로 이동할 수 있습니까?

  24. 24

    모듈 전역 범위를 사용하여 프로토 타입에서 액세스 할 수있는 개인 클래스 필드를 정의합니다.

  25. 25

    Kotlin에서 상속 된 클래스를 사용하여 var를 val로 재정의 할 수 있나요?

  26. 26

    Python : 클래스 변수를 정의 할 때 어떤 범위에 액세스 할 수 있습니까?

  27. 27

    응용 프로그램간에 .proto 파일의 네임 스페이스를 변경할 수 있습니까?

  28. 28

    네임 스페이스가 C ++에서 추가 클래스를 추가하지 못하도록 방지 할 수있는 방법이 있습니까?

  29. 29

    다른 클래스의 클래스에 정의 된 사용자 지정 변수를 상속 할 수 있습니까?

뜨겁다태그

보관