많은 다른 유형의 경우 std::shared_ptr<T>
을 사용하고 있습니다. 이 모든 다른 벡터를 하나의 벡터에 저장하기 때문에 나는 std::vector<std::shared_ptr<void> >
을 가지고 있다고 생각하고 필요하다면 void
으로 캐스팅했다.std :: shared_ptr에서 "cast from/to void"와 유추
나는 다음과 같은 "베어 포인터"사용이 g++
와 함께 완벽하게 작동하고 당신이 벌거 벗은 포인터가있는 경우이 작업을 수행 할 수있는 적절한 방법 AFAIK
#include <iostream>
void print(void* void_ptr)
{
int* int_ptr = static_cast<int*>(void_ptr);
std::cerr << *int_ptr << std::endl;
}
int main()
{
int* int_ptr = new int(4);
void* void_ptr = static_cast<void*>(int_ptr);
print(void_ptr);
delete int_ptr;
}
을 잘 알고 있어요. 하지만 지금은 std::shared_ptr
와 동일하게하고 싶습니다.
#include <iostream>
#include <memory>
void print(std::shared_ptr<void> void_ptr)
{
std::shared_ptr<int> int_ptr = ??(void_ptr); // simple cast won't work
std::cerr << *int_ptr << std::endl;
}
int main()
{
std::shared_ptr<int> int_ptr = std::make_shared<int>(4);
std::shared_ptr<void> void_ptr = ??(int_ptr); // same problem here
print(void_ptr);
}
이 경우에도 가능합니까? 내가 가진 shared_ptr
을 가지고있는 많은 다른 타입들이 있지만,이 타입들은 공통점이 거의 없습니다. 그들은 기본 클래스 또는 이와 유사한 것을 공유하지 않습니다. (유일한 방법 인 경우이를 수행 할 것이지만 shared_ptr<void>
과 같이 좀 더 굉장합니다).
다음 질문/답변을 읽는 것이 좋습니다. http://stackoverflow.com/questions/5913396/why-do-stdshared-ptrvoid-work. 저는 특정 질문에 대한 다소 안목이있는 사람이기 때문에 공유 할 지식이 없지만 그 링크에 대한 정보는 귀하에게 실행 가능한 솔루션에 도달하는 데 도움이 될 것입니다. – paercebal
그들은 공통점이 없다면 왜 왜 그들에게'void *'를 전달하려고합니까? 일반적으로'void *'를 사용한다면 뭔가 잘못되었거나 함수의 시그니쳐에서 타입을 얻으 려합니다 (즉, 이론적으로는 어떤 타입이라도 취할 수있는 함수이므로 특정 유형을 취하는 함수로 전달). 후자의 경우, 당신은'boost :: any'를 사용해야합니다. 이것은 type-safe합니다. –
@ NicolBolas : 기본적으로 "수학"과 "코드"를 분리하고 싶습니다. 수학적 구조를 나타내는 클래스가 있습니다. 이러한 각 클래스 중 하나의 클래스에는 'Foo'라는 객체가 있어야합니다. 이제는'foo' 객체가 모든 것을 모른 채 수학 객체에 액세스하게하는 레이어를 만들고 싶습니다. 나는 올바른 사용을 돌보고 나는 "나는 정말로 그것이 무엇인지 전혀 알지 못하고 지나가고 싶은 무언가에 대한 포인터를 가지고있다."라고 무효로 생각한다. 나는 '부스트'를 사용하고 싶지 않다. – stefan