이 문제를 이해하는 데 다소 시간이 걸렸지 만, boost::any
의 의미는 혼란 스럽습니다. 값 형식으로boost :: 포인터와의 혼란 vs 값
, 당신과 같이 사용 :
int value = 100;
boost::any something;
something = value;
//...later...
int value = boost::any_cast<int>(&something);
이 코드는 내부적으로 사본으로 value
명확하고 의미가 있지만 저장합니다. 즉, 더 큰 오브젝트의 경우 내부에 boost::any
을 넣으면 복사됩니다. 또한 void*
으로 대체하는 함수는 boost::any
오브젝트에 포함 된 값을 수정할 때 함수 외부의 값이 수정 될 것으로 예상됩니다 (복사 한 이후에는 발생하지 않음). 나는 그것으로 포인터를 넣을 경우
그래서, 상황이 이상한 얻을 :
int value = 100;
boost::any something;
something = &value;
//...later...
int* value = *boost::any_cast<int*>(&something);
내가 반환 값 역 참조가이 경우에 boost::any_cast
반환 int**
때문에! 나는 또한 체크하지 않았다. 그러나 이것이 something.empty() == true
인 경우 충돌 할 수 있다고 생각한다. 이것은 전혀 간단하지 않습니다.
값을 내 boost::any
에 저장하고 싶지 않습니다. 포인터에서만 작동하고 의미 상으로는 void*
에 가깝게 동작해야합니다. 포인터가, 밖으로 포인터, 일부 형식 안전 함께. 기본적으로 내가 원하는 것은 boost::any_pointer
, 또는 이와 비슷한 것입니다. boost::any
에서 포인터를 제외한 모든 것을 허용하지 못하도록 할 수 있습니까? 그리고 그렇지 않다면, 내가 찾고있는 의미를 줄 수있는 boost::any
에 대한 대안이 있습니까?
'boost :: any'는 꽤 e이다. asy를 생성 한 다음 의미를 바꿀 수 있습니다. –
첫 번째 스 니펫이 작동하지 않고 dereferencement (as snippet2)가 필요합니다. [Demo] (http://coliru.stacked-crooked.com/a/df5bdb307f56b709) – Jarod42
클래스에서'boost :: any'를 포인터 만 허용. – Jarod42