C++で動的型を作成してみた
型推論でなく動的型を作ってみた。
dynamic.hpp
#include<string>
#include<Windows.h>
class Dynamic {
public:
Dynamic() {
this->Value = nullptr;
this->Size = 0
}
~Dynamic()
{
}
template<typename T>
void set(T value_t)
{
this->Size = sizeof(value_t);
this->Value = (&value_t);
}
template<typename T> T get(void)
{
return *((T *)this->Value);
}
private:
HANDLE Value;
size_t Size;
};
main.cpp
include<iostream>
include"dynamic.hpp"
int main(void){
Dynamic d;
d.set<char*>("123");
auto s = d.get<char*>();
d.set<char>('5');
auto c = d.get<char>();
d.set<int>(8);
auto i = d.get<int>();
d.set<float>(3.141592);
std::cout<<i<<endl<<s<<endl<<c<<endl<<d.get<float>()<<endl;//output->"123 \n 5 \n 8 \n 3.141592"
}
dynamic.hpp
#include<string>
#include<Windows.h>
class Dynamic {
public:
Dynamic() {
this->Value = nullptr;
this->Size = 0
}
~Dynamic()
{
}
template<typename T>
void set(T value_t)
{
this->Size = sizeof(value_t);
this->Value = (&value_t);
}
template<typename T> T get(void)
{
return *((T *)this->Value);
}
private:
HANDLE Value;
size_t Size;
};
main.cpp
include<iostream>
include"dynamic.hpp"
int main(void){
Dynamic d;
d.set<char*>("123");
auto s = d.get<char*>();
d.set<char>('5');
auto c = d.get<char>();
d.set<int>(8);
auto i = d.get<int>();
d.set<float>(3.141592);
std::cout<<i<<endl<<s<<endl<<c<<endl<<d.get<float>()<<endl;//output->"123 \n 5 \n 8 \n 3.141592"
}
今回の反省は難しい型になると途端に使えなくなることでしょうか、あと前に入れた型をわざわざ覚えておかないといけないのでそこが大変だった。型の記録ができる便利なものがあれば教えて頂きたいです。汎用ポインタはできないことがないけどとても危険で簡単にコンピュータ自身を壊してしまうので、JavaやC#のようなObject型があれば少々は安全なのにそれができないのも残念。
Author And Source
この問題について(C++で動的型を作成してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/yuri_love/items/e6f8d15ceba074442db9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .