Недавно я начал использовать библиотеку C++ Boost
, и я тестирую класс any
, который может хранить любые типы данных. На самом деле я пытаюсь определить operator<<
, чтобы легко распечатать содержимое любой переменной типа any
(и, конечно же, класс содержимого должен содержать operator<<
). Я только начал с образцов (int
, double
...), потому что они отображаются по умолчанию. И до сих пор у меня есть этот код:Cast boost :: любой экземпляр до его реального типа
#include <boost/any.hpp>
#include <iostream>
#include <string>
using namespace std;
using namespace boost;
ostream& operator<<(ostream& out, any& a){
if(a.type() == typeid(int))
out << any_cast<int>(a);
else if(a.type() == typeid(double))
out << any_cast<double>(a);
// else ...
// But what about other types/classes ?!
}
int main(){
any a = 5;
cout << a << endl;
}
Так что проблема здесь в том, что я должен перечислять все возможные типы. Есть ли способ лить переменную в particular type
, имеющую type_info
этого particular type
?
Вы не можете перечислить «все возможные типы». Тип называется * any *, not * every *. –
Возможно, вы можете использовать [Стирание типа Boost] (http://www.boost.org/doc/libs/1_55_0/doc/html/boost_typeerasure.html) для более конкретных потребностей стирания типа. Как бы то ни было, вопрос путается, потому что заголовок о кастинге (что, вероятно, неверно или не рекомендуется), тогда как тело - это форматирование, что является хорошо понятой и совершенно другой проблемой. –
Я никогда не использовал 'boost :: any', и я написал довольно странный код. Вам также не нужно использовать его. Его используют _incredibly_ few. –