C++11には、型推論と管理全体に関して、驚くほど多くの優れた機能が含まれています。たとえば、autoおよびdecltypeキーワードは、言語に追加する価値があることが証明されています。
これらのシンプルでありながら効果的な機能を採用するにつれて、何らかのリフレクション システムを実装することを考え始めます。これが私がこれまでやってのけたことです:
/// ------------------------------------------------------------
/// @class Reflection
/// @brief General-purpose reflection class.
/// @exmpl Get type id:
/// auto a = Reflection::get_id_type<int>();
/// auto b = Reflection::get_id_type<Object>();
/// Get type via received id:
/// decltype(Reflection::get_type(a)) d;
/// @note It is forbidden to create an instance of this class.
/// ------------------------------------------------------------
class Reflection{
public:
/// Static member functions:
template<typename T>
static inline long get_id_type(void){
return reinterpret_cast<long>(&Database<T>::id);
}
static auto get_type(long const type_id) -> decltype(/* UNFINISHED! */){ // This is where I'm having problems.
// This function body is intentionally left empty.
// All that matters is the return type.
}
private:
/// Inner structures:
template<typename T>
struct Database{
static void* id; // Created void pointer here, because only the address of this variable matters.
};
/// Constructors & destructors:
Reflection(void) = delete;
~Reflection(void) = delete;
/// Member functions (overloaded operators):
Reflection& operator=(Reflection&&) = delete;
Reflection& operator=(Reflection const&) = delete;
};
コードは理解しやすいものでなければなりません。コメントを含めてコード全体を読むと、このクラスの使用方法が理解できるはずです。しかし、問題は次のとおりです。
「この式をdecltype -specifierによって使用可能な型に変換するために、関数 "get_type" から式を返すにはどうすればよいですか?」
前もって感謝します。