私が働くこのコード、...これまでのところは良いしている:構築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