我正在使用增強融合。我想要聲明一個模板函數,該函數將分配給地圖的一個字段並執行各種其他功能。我不能在我的生活中弄清楚如何獲取存儲在fusion :: map中的元素的類型。我相信這是可能的 - 我只是無法理解文檔。我想我有兩個問題:如何獲得boost :: fusion :: map中的值的類型?
- 我可能不會有正確的頭包括 - 編譯器抱怨不完全類型: 的boost ::融合::擴展:: value_of_data_impl
- 我並不清楚如何使用result_of,value_of_data等
爲了保持這個特定的最小測試用例如下所示。
#include <string>
#include <boost/shared_ptr.hpp>
#include <boost/fusion/include/container.hpp>
#include <boost/fusion/container.hpp>
#include <boost/fusion/iterator.hpp>
using std::string;
using namespace boost;
namespace fields {
struct rgb;
struct gray;
struct keypoints;
struct edges;
struct objects;
}
typedef fusion::map<
fusion::pair<fields::rgb, string>,
fusion::pair<fields::gray, int>,
fusion::pair<fields::keypoints, int>,
fusion::pair<fields::edges, int>,
fusion::pair<fields::objects, double>
> Fields;
Fields A_map;
template<typename field>
void Add(fusion::result_of::value_of_data<field> data) {
fusion::at_key<field>(A_map) = data;
}
int main() {
Add<fields::gray>(123);
}
功能添加應宣佈爲接收參數,該參數是灰色場(在本例INT)的類型。
根據文檔'value_of_data'僅用於迭代器。我認爲你想要的元函數是'value_at_key'。如果是這樣,請回答這個問題,因爲我目前無法回答。 – llonesmiz