Я хотел бы сделать что-то вдоль линий:Сохранение типа и программно литье другого переменного хранимого типа
Type type = int; // or type_of(some_other_variable)
double variable = 42.0;
std::cout << (type)variable;
Возможно ли это?
EDIT: То, что я действительно пытаюсь сделать, - это вариант Qt-стиля и VariantMap. Мой текущий код;
#include <string>
#include <map>
#include <iostream>
struct Variant
{
bool m_bool;
int m_int;
double m_double;
std::string m_string;
Variant() {};
Variant(bool bBoolean) { m_bool = bBoolean; }
Variant(int iInteger) { m_int = iInteger; }
Variant(double dDouble) { m_double = dDouble; }
Variant(std::string sString) { m_string = sString; }
Variant(const char *_Ptr) { m_string = _Ptr; }
operator bool() { return m_bool; }
operator int() { return m_int; }
operator double() { return m_double; }
operator std::string() { return m_string; }
};
typedef std::map<std::string, Variant> VariantMap;
int main()
{
VariantMap map;
map["bool"] = true;
map["int"] = 42;
map["double"] = 3.14159265358979323846;
map["string"] = "foobar";
std::cout
<< "bool " << static_cast<bool>(map["bool"]) << std::endl
<< "int" << static_cast<int>(map["int"]) << std::endl
<< "double " << static_cast<double>(map["double"]) << std::endl
<< "string "<< static_cast<std::string>(map["string"]) << std::endl
;
system("pause");
return 1;
}
Но вместо явного приведения к содержащемуся типу, когда доступ необходим, я хотел бы хранить тип при назначении, а и автоматическое приведении к сохраненным типу при доступе.
Вам действительно нужно сообщить нам, какую проблему вы пытаетесь решить. Просто рассказывая нам, как вы хотели бы его решить, нам не хватает информации. Например, возможно, что '#define type int 'решит вашу проблему. Но это также возможно, что не имеет ничего общего с вашей проблемой. Мы не можем сказать, потому что мы не знаем, какова ваша проблема. –
Я сделал такое. верхнее сообщение теперь редактируется, чтобы включить объяснение моего приложения. – rogueyoshi
Странно, что вы приняли ответ, который не отвечает на ваш реальный вопрос. Существует ответ, используйте дискриминированный союз с перегрузкой 'operator <<'. –