Skip to content

Instantly share code, notes, and snippets.

@MasazI
Created May 19, 2015 14:18
Show Gist options
  • Save MasazI/6f12e2b39a014c0d6e29 to your computer and use it in GitHub Desktop.
Save MasazI/6f12e2b39a014c0d6e29 to your computer and use it in GitHub Desktop.
genericpointer.cpp
//
// genericpointer.cpp
// CplusplusPractice
//
// Created by masai on 2015/05/19.
// Copyright (c) 2015年 masai. All rights reserved.
//
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
// 構造体Container
struct Container{
void* data;
};
// 構造体Num
struct Num{
int n;
};
int main(int argc, const char * argv[]) {
const char* text = "text";
Container con1;
// Container構造体のdataにconst charのポインタを入れる(void*にキャストする)
con1.data = (void*)text;
std::cout << "con1.data = " << abi::__cxa_demangle(typeid(con1.data).name(), 0, 0, 0) << std::endl;
// Num構造体を動的確保
Num* numPointer = new Num();
numPointer->n = 42;
// Container構造体のdataにNum型のポインタを入れる
Container con2;
con2.data = (void*)numPointer;
std::cout << "con2.data = " << abi::__cxa_demangle(typeid(con1.data).name(), 0, 0, 0) << std::endl;
printf("%s\n", static_cast<const char*>(con1.data)); // 取り出す際にstatic_castする
printf("%d\n", ((Num*)con2.data)->n); //通常のキャストも可能
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment