boost :: any가 보유한 데이터에 대한 const 참조를 얻는 방법은 무엇입니까?

MatrixAndrew

참조 캐스팅을 boost::any통해 인스턴스 를 검색 한 후 const 정확성을 유지하는 데 문제가 boost::any_cast있습니다.

내 코드 :

MyMap paramMapToSet;
MyMap& paramMap = &paramMapToSet;
const MyMap& constParamMap = &paramMapToSet;

A hoe;
paramMap.set(hoe, "structA");

// this works
A& hoeRef = paramMap.getByRef<A>("structA");
hoeRef.myInt = 101;
cout << paramMap.get<A>("structA").myInt << endl; // prints 101

// as well as this:
hoe = constParamMap.get<A>("structA");
cout << hoe.myInt << endl;

// and this:
const A& constHoeRef = paramMap.getByRef<A>("structA");
cout << constHoeRef.myInt << endl;

// however this doesn't work, why?? (error message below)
const A& constHoeRef = constParamMap.getByRef<A>("structA");
cout << constHoeRef.myInt << endl;

마지막 버전에서만 오류가 발생하는 이유에 대해서도 약간 혼란 스럽습니다. 내가 얻는 오류 메시지는 다음과 같습니다.

C : ... \ boost_1_58_0 \ boost \ any.hpp : 284 : 오류 : C2440 : 'return': 'const nonref'에서 'A &'로 변환 할 수 없습니다.

284 행은 다음과 같습니다.

return any_cast<const nonref &>(const_cast<any &>(operand));

아래 줄에서 호출됩니다.

구현 :

// a testing class:
struct A{
    int myInt;
    A() = default;
    A(const A& other) : myInt(other.myInt)
        { cout << "Class A is being copied" << endl; }
};

// any-map implementation
class MyMap{
public:
    template<typename T>
    T get(const std::string& path) const
    {
        return any_cast<T>(data.at(path));
    }

    template<typename T>
    const T& getByRef(const std::string& path) const
    {
        return any_cast<T&>(data.at(path)); // compiler originates the error from here
    }

    template<typename T>
    T& getByRef(const std::string& path)
    {
        return any_cast<T&>(data.at(path)); 
    }

    template<typename T>
    void set(T val, const std::string& path)
    {
        data[path] = val;
    }

private:
    std::map<std::string, boost::any> data;
};

MyMap이 이미 즉시 사용할 수있는 쓸모없는 래핑 기능을 제공한다고 생각할 수 있지만 실제 구현에는 내부 std :: map 내부에 중첩 된 맵을 자동으로 생성하는 get / set 메서드가있어 데이터 구조와 같은 멋진 유연한 DOM을 제공합니다.

궤도의 가벼움 레이스

추측이긴하지만 확실히 ...

return any_cast<const T&>(data.at(path));
//              ^^^^^^

…아니?

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

객체가 아닌 클래스에 대한 참조 / 포인터를 얻는 방법은 무엇입니까?

분류에서Dev

foreach 데이터 바인딩 내에서 ViewModel에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

반복자가 가리키는 객체에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

Vec의 요소에 대한 여러 가변 참조를 얻는 방법은 무엇입니까?

분류에서Dev

const에 대한 정적 참조를 사용하면 임시 변수에 대한 참조가 반환되는 이유는 무엇입니까?

분류에서Dev

각 태그에 대한 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

복사 불가능한 유형에 대한 변경 가능한 참조를 업데이트하는 방법은 무엇입니까?

분류에서Dev

SQL Server에서 다양한 조건에 대한 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

ViewPager에있는 조각의 뷰에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

@ManyToOne 관계로 역 엔터티에 대한 조인 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

Swift에서 이전 viewController에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

Bootstrap 3 Typeahead 콜백 내에서 입력 요소에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

포인터 벡터에 대한 for 루프 기반 C ++ 범위. const 참조로 요소를 캡처하는 방법은 무엇입니까?

분류에서Dev

VSPackage MSVS 확장 내에서 패키지 개체에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

ES6에서 클래스 함수에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

활동에서 CardView 내부의 뷰에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

내 MainActivity에서 EditTextPreference에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

localStorage에서 추가 한 후 표시된 html에서 div 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

cvCvColor 후 YUV 구성 요소에 대한 참조를 얻는 방법은 무엇입니까?

분류에서Dev

rc :: Weak <RefCell <T >>가 가리키는 노드에 대한 rc :: Ref <T> 참조를 얻는 방법은 무엇입니까?

분류에서Dev

MySQL : 테이블 참조에 대한 참조를 계산하는 방법은 무엇입니까?

분류에서Dev

기록 데이터에서 가장 빈번한 경로를 얻는 방법은 무엇입니까?

분류에서Dev

이 라이브러리의 모든 참조와 함께 클래스 라이브러리에 대한 참조를 추가하는 방법은 무엇입니까?

분류에서Dev

다른 목록에 대한 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

조작 후 배열에 대한 참조를 유지하는 방법은 무엇입니까?

분류에서Dev

명령 ID에 대한 키보드 가속기를 얻는 방법은 무엇입니까?

분류에서Dev

사용자가 특정 게시물에 대한 세부 정보를 얻는 방법은 무엇입니까?

분류에서Dev

명명 된 변수를 사용하여 const rvalue 참조 매개 변수에 대한 기본값을 정의하는 방법은 무엇입니까?

분류에서Dev

PDO : 데이터베이스에 데이터를 삽입 한 후 결과를 얻는 가장 좋은 방법은 무엇입니까?

Related 관련 기사

  1. 1

    객체가 아닌 클래스에 대한 참조 / 포인터를 얻는 방법은 무엇입니까?

  2. 2

    foreach 데이터 바인딩 내에서 ViewModel에 대한 참조를 얻는 방법은 무엇입니까?

  3. 3

    반복자가 가리키는 객체에 대한 참조를 얻는 방법은 무엇입니까?

  4. 4

    Vec의 요소에 대한 여러 가변 참조를 얻는 방법은 무엇입니까?

  5. 5

    const에 대한 정적 참조를 사용하면 임시 변수에 대한 참조가 반환되는 이유는 무엇입니까?

  6. 6

    각 태그에 대한 데이터를 얻는 방법은 무엇입니까?

  7. 7

    복사 불가능한 유형에 대한 변경 가능한 참조를 업데이트하는 방법은 무엇입니까?

  8. 8

    SQL Server에서 다양한 조건에 대한 데이터를 얻는 방법은 무엇입니까?

  9. 9

    ViewPager에있는 조각의 뷰에 대한 참조를 얻는 방법은 무엇입니까?

  10. 10

    @ManyToOne 관계로 역 엔터티에 대한 조인 데이터를 얻는 방법은 무엇입니까?

  11. 11

    Swift에서 이전 viewController에 대한 참조를 얻는 방법은 무엇입니까?

  12. 12

    Bootstrap 3 Typeahead 콜백 내에서 입력 요소에 대한 참조를 얻는 방법은 무엇입니까?

  13. 13

    포인터 벡터에 대한 for 루프 기반 C ++ 범위. const 참조로 요소를 캡처하는 방법은 무엇입니까?

  14. 14

    VSPackage MSVS 확장 내에서 패키지 개체에 대한 참조를 얻는 방법은 무엇입니까?

  15. 15

    ES6에서 클래스 함수에 대한 참조를 얻는 방법은 무엇입니까?

  16. 16

    활동에서 CardView 내부의 뷰에 대한 참조를 얻는 방법은 무엇입니까?

  17. 17

    내 MainActivity에서 EditTextPreference에 대한 참조를 얻는 방법은 무엇입니까?

  18. 18

    localStorage에서 추가 한 후 표시된 html에서 div 데이터를 얻는 방법은 무엇입니까?

  19. 19

    cvCvColor 후 YUV 구성 요소에 대한 참조를 얻는 방법은 무엇입니까?

  20. 20

    rc :: Weak <RefCell <T >>가 가리키는 노드에 대한 rc :: Ref <T> 참조를 얻는 방법은 무엇입니까?

  21. 21

    MySQL : 테이블 참조에 대한 참조를 계산하는 방법은 무엇입니까?

  22. 22

    기록 데이터에서 가장 빈번한 경로를 얻는 방법은 무엇입니까?

  23. 23

    이 라이브러리의 모든 참조와 함께 클래스 라이브러리에 대한 참조를 추가하는 방법은 무엇입니까?

  24. 24

    다른 목록에 대한 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

  25. 25

    조작 후 배열에 대한 참조를 유지하는 방법은 무엇입니까?

  26. 26

    명령 ID에 대한 키보드 가속기를 얻는 방법은 무엇입니까?

  27. 27

    사용자가 특정 게시물에 대한 세부 정보를 얻는 방법은 무엇입니까?

  28. 28

    명명 된 변수를 사용하여 const rvalue 참조 매개 변수에 대한 기본값을 정의하는 방법은 무엇입니까?

  29. 29

    PDO : 데이터베이스에 데이터를 삽입 한 후 결과를 얻는 가장 좋은 방법은 무엇입니까?

뜨겁다태그

보관