0
我有不同的數據類型,我試圖保存在一個HashMap中。異構HashMap C++
HashMap將在變量參數函數內部創建。
結構和Boost下的工會::任何工具都不適合我,
工會不接受類作爲數據類型。 Boost ::任何給我錯誤,當我通過可變參數。
有什麼建議嗎?
請告訴我,如果我應該提供更多的細節。
代碼的boost ::任何
#include <iostream>
#include <string>
#include <cstdarg>
#include <boost/any.hpp>
#include <boost/variant.hpp>
class vec3D{
public:
int x;
vec3D(int p){ x=p;}
};
using namespace std;
struct testing{
enum Type {U32, U64, I32, I64, D, S, B, ENDNOW};
Type val;
boost::any Point;
};
void mandatory(int count...){
va_list args;
va_start(args, count);
testing tester;
for (tester.val=va_arg(args, testing::Type) ; tester.val != testing::ENDNOW ; tester.val=va_arg(args, testing::Type)){
//for (testing tester.val = va_arg(args, testing->Type); tester.val != 11; tester=va_arg(args, testing->Type)){
switch(tester.val) {
case 0: cout<< "u32"; tester.Point = va_arg(args, uint32_t); break;
case 1: cout<< "u64"; tester.Point = va_arg(args, uint64_t); break;
case 2: cout<< "32"; tester.Point = va_arg(args, int32_t); break;
case 3: cout<< "64"; tester.Point = va_arg(args, int64_t); break;
case 4: cout<< "double"; tester.Point = va_arg(args, double); break;
//case 5: cout<< "string"; tester.Point = va_arg(args, string); break;
case 6: cout<< "boolean"; tester.Point = va_arg(args, bool); break;
case 7: cout<< "EndNow"; break;
default: break; //this is the end now.
}
cout<<'\t'<<tester.Point<<endl;
}
va_end(args);
cout<<endl;
}
int main(){
mandatory(12, testing::U32, 99, testing::B, 0, testing::D,11E1, testing::I64,5000000, testing::ENDNOW);
return 0;
}
代碼的boost ::變種
#include <iostream>
#include <string>
#include <cstdarg>
#include <boost/any.hpp>
#include <boost/variant.hpp>
class vec3D{
public:
int x;
vec3D(int p){ x=p;}
};
using namespace std;
struct testing{
enum Type {U32, U64, I32, I64, D, S, B, ENDNOW};
Type val;
typedef boost::variant<uint32_t, uint64_t, int32_t, int64_t, double, string, bool, vec3D> point;
point Point;
};
void mandatory(int count...){
va_list args;
va_start(args, count);
testing tester;
for (tester.val=va_arg(args, testing::Type) ; tester.val != testing::ENDNOW ; tester.val=va_arg(args, testing::Type)){
switch(tester.val) {
case 0: cout<< "u32"; tester.Point = va_arg(args, uint32_t); break;
case 1: cout<< "u64"; tester.Point = va_arg(args, uint64_t); break;
case 2: cout<< "32"; tester.Point = va_arg(args, int32_t); break;
case 3: cout<< "64"; tester.Point = va_arg(args, int64_t); break;
case 4: cout<< "double"; tester.Point = va_arg(args, double); break;
//case 5: cout<< "string"; tester.Point = va_arg(args, string); break;
case 6: cout<< "boolean"; tester.Point = va_arg(args, bool); break;
case 7: cout<< "EndNow"; break;
default: break; //this is the end now.
}
cout<<'\t'<<tester.Point<<endl;
}
va_end(args);
cout<<endl;
}
int main(){
mandatory(12, testing::U32, 99, testing::B, 0, testing::D,11E1, testing::I64,5000000, testing::ENDNOW);
return 0;
}
你需要蘇輸入任何類型或只是一組類型?如果是後者考慮使用boost/std變體。 – NathanOliver
@NathanOliver沒有與用戶定義的類一起工作。 –
定義「沒有工作」。 '任何'/'變種'聽起來像你所需要的。如果你無法正常工作,你可以隨時發佈[mcve]並尋求幫助解決問題。 – NathanOliver