QVariant のような「汎用」コンテナーの 1 つに、さまざまな型 (int、float、QString、または std::string、bool) の値を効率的に格納する方法が必要です。
メモリ使用量を減らしてアーカイブしたい。
オーバーヘッドになるため、内部値の型を格納しないコンテナを好みます。
どちらを使用する必要がありますか?
QVariant のような「汎用」コンテナーの 1 つに、さまざまな型 (int、float、QString、または std::string、bool) の値を効率的に格納する方法が必要です。
メモリ使用量を減らしてアーカイブしたい。
オーバーヘッドになるため、内部値の型を格納しないコンテナを好みます。
どちらを使用する必要がありますか?
私は約1年前に同様の質問に直面しました。理由は覚えていませんが、boost:any を選択しました。boost:any は、希望の形式で値を取得するために使用できる typeid を保存します。
次に例を示します。
#include <iostream>
#include <boost/any.hpp>
#include <string>
int main()
{
boost::any value;
for(int i=0; i < 3; i++)
{
switch (i)
{
case 0:
value = (double) 8.05;
break;
case 1:
value = (int) 1;
break;
case 2:
//std::string str = "Hello any world!";
//value = str;
value = std::string("Hello any world!");
break;
}
if(value.type() == typeid(double))
std::cout << "it's double type: " << boost::any_cast<double>(value) << std::endl;
else if(value.type() == typeid(int))
std::cout << "it's int type: " << boost::any_cast<int>(value) << std::endl;
else if(value.type() == typeid(std::string))
std::cout << "it's string type: " << boost::any_cast<std::string>(value) << std::endl;
}
return 0;
}
お役に立てれば!!