利用c++17 variant 可以包装成任意类型数据
#include <iostream>
#include <variant>
#include <vector>
#include <string>
using namespace std;
template<typename T>
class AnyData{
public:
AnyData(T v):m_data(v){}
virtual ~AnyData(){}
// T Get()
// {
// try
// {
// T v = std::get<T>(m_data);
// return v;
// }
// catch(const std::exception& e)
// {
// std::cerr << e.what() << '\n';
// }
// }
operator T() const
{
try
{
T v = std::get<T>(m_data);
return v;
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
}
private:
std::variant<const char*, int8_t, int16_t, int32_t, int64_t, float, double, bool, std::string, std::vector<int>> m_data;
};
int main(int argc, char const *argv[])
{
AnyData any1(100);
std::string s = "wwww";
AnyData any2(s);
AnyData any3("erhyer");
cout << any3 << endl;
return 0;
}