Я предполагаю, что путаница здесь о том, что вы подразумеваете под «, который может быть установлен на любой тип».
Я читал, что один из четырех способов:
- Вы реализовал класс как импульс :: Любые и хочу скрыть его в своем классе возвращая его содержимое при вызове.
- У вас есть определение шаблона, где один из параметров шаблона содержит информацию о типе MyVariable
- Вы пытаетесь вернуть объект type_info для переменной, определенной с помощью подталкивание :: Любой аналог
- Вы пытаетесь вернуться объект type_info для переменной, определенной в шаблоне
Если 1 или 3:
template<typename T> T GetValue() { return any_cast<T>(MyVariable); }
const std::type_info &GetValueType() { return MyVariable.type(); }
вы не предоставили информацию о том, как ваш повышающего :: An y analog works, поэтому я только предположил, что это boost :: Any instance (который я лично никогда не использовал, поэтому давайте надеяться, что мой синтаксис верен). Это произойдет, если вы попытаетесь извлечь неправильный тип из MyVariable. Если вы предпочитаете иметь дело с указателями и NULL значения сделать это следующим образом:
template<typename T> T* GetValue() { return any_cast<T*>(&MyVariable); }
Это возвращает указатель NULL, если T не тип элемента, хранящегося в переменной.
Если 2 или 4:
Ну, в этом случае у вас есть параметр шаблона где-нибудь, который определяет тип MYVARIABLE. Что-то вроде этого является то, что вы хотите:
template<typename T> class Holder {
T MyVariable;
T &GetValue() { return MyVariable; }
const std::type_info & GetValueType() { return typeid(T); }
};
Ну, вот надеясь, что один из этих ответов соответствует вопрос, который вы пытались спросить :)
Вы спрашиваете, как вернуть результат 'TypeID (...) выражение из функции? – Praetorian
'std :: type_info GetType() {return typeid (MyVariable); } ', чтобы вернуть тип, а затем, возможно, void GetValue (void * ptr) {* (SomeType *) ptr = MyVariable; } '? Но это кажется действительно ужасным **. И это пахнет проблемой XY - * с какой проблемой вы пытаетесь решить это? * Возможно, вы просто ищете простой полиморфизм? –
'typeid' используется, когда вам нужно исследовать измененное имя для типа, а не для вывода типа, в C++ 11 существуют' decltype' и 'auto', которые предназначены для этого. Кроме того, если ваш класс способен принимать «любой» тип, почему бы просто не использовать шаблонный тип «T» в качестве возвращаемого типа? – user2485710