나는 boost fusion을 사용하고있다. 맵의 필드에 할당하고 다양한 다른 기능을 수행하는 템플릿 함수를 선언하고 싶습니다. 나는 퓨전 맵에 저장된 엘레멘트의 타입을 얻는 방법을 배우지 못한다. 나는 그것이 가능하다는 것을 확신한다 - 나는 다만 문서를 짐작할 수 없다. 나는 두 가지 문제가 있다고 생각 :boost :: fusion :: map에서 값의 형식을 얻으려면 어떻게해야합니까?
- 나는 올바른 헤더가 포함이되지 않을 수 있습니다 - 컴파일러가 불완전한 형태의 불평 : 부스트 :: 융합 :: 확장 :: 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'는 이터레이터에서만 사용됩니다. 나는 당신이 원하는 metafunction이'value_at_key'라고 생각한다. 그것이 내가 지금 할 수 없기 때문에 질문에 답하십시오. – llonesmiz