C ++ 11 — Возвращение выражения для определения типа

C ++ 11 включает в себя множество замечательных функций, когда дело доходит до тип вычета а также управление в целом. Например авто а также 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;
};

Код должен быть достаточно легким для понимания. Если вы читаете полный код с комментариями, вы должны понимать, как использовать этот класс. Но вопрос в том,

«Как мне вернуть выражение из функции» get_type «, чтобы
превратить это выражение в пригодный для использования тип decltype-Спецификатор?»

Заранее спасибо.

0

Решение

Вы не можете иметь тип возврата, который зависит от время выполнения аргумента. Период. То, что вы пытаетесь сделать, неосуществимо.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector