I 작동이 코드 ... 지금까지 너무 좋아 한 :건물 constexpr 템플릿 구조체 (C++ 11)
struct _TYPEIDSTR {};
typedef _TYPEIDSTR *TYPE_ID;
template<class T> _TYPEIDSTR _TYPE_ID;
template<class T> constexpr TYPE_ID getTypeID() { return &_TYPE_ID<T>; }
이 같은 주에 전화 :
constexpr TYPE_ID id1 = getTypeID<int>();
constexpr TYPE_ID id2 = getTypeID<int>();
RLOG("ID1 : " << id1);
RLOG("ID2 : " << id2);
작품 완벽하게, 그리고 getTypeID() 호출에 사용 된 각 유형에 대한 고유 한 식별자가 있습니다.
template<typename RES, typename... ARGS> struct _GlobalOverlayInfo {
bool _member;
RES(*_fn)(ARGS...);
size_t _nargs;
TYPE_ID _argIDs;
constexpr _GlobalOverlayInfo(RES(*fn)(ARGS...)) :
_member(false),
_fn(fn),
_nargs(sizeof...(ARGS)),
_argIDs {getTypeID<ARGS>()...}
{}
};
template<typename RES, typename... ARGS>
constexpr auto getOverlayInfo(RES(*fn)(ARGS...)) {
return & _GlobalOverlayInfo<RES, ARGS...>(fn); <<---ERROR1
}
이 기능을 사용하여 :
int pippo(int x) {
return 0;
}
과 같이 전화 :
constexpr auto x = getOverlayInfo(pippo); <<--- ERROR2
내가 2를 얻을 지금은 함수에 대한 몇 가지 정보를 제공 구조체를 구축하려는 표시된 오류; ERROR1은 "임시 주소"를 가져 오지만 (컴파일 시간 평가가 아니어야합니다) ERROR2는 "오류 : '&'이 상수 표현이 아닙니다." 여러 가지 방법을 시도했지만 성공하지 못했습니다. 내가 틀린 곳? 이 결과를 얻는 방법이 있습니까 (C++ 11)? 필요한 모든 RES 및 ARGS ... 매개 변수에 대해 생성 된 고유 한 구조체에 대한 포인터입니다.
템플릿 변수 ('_TYPE_ID')는 C++ 14 기능입니다. C++ 14 답변을 수락 하시겠습니까? – max66
uhmm ... C++ 14에서 테스트 중이지만 C++ 11에서 실행해야합니다. 그러나 노력이 가치가 있다면 최신 GCC로 마이크로 컨트롤러 용 툴체인을 다시 만들려고 할 수 있습니다. 나는 가능한 한 여분의 RAM을 필요로하므로 컴파일 시간에이 정보를 필요로하므로 플래시 메모리에 저장해야한다. – Max
이해가 잘 못됩니다 : ** type ** 또는 ('pippo')에 의존적 인 객체를 참조하는 conpile-time identificator가 필요합니까? – max66