Подскажите (что-то не могу найти, хотя точно помню, что такая элементарная вещь в C++ была) как вернуть не переменную, а ее тип, который я дальше могу использовать в шаблонах и sizeof()
т.е. что-то типа
class myClass
{
public:
struct myData
{};
static typedef type() {
return myData;
}
}
с использованием
std::vector<myClassObject::type()> data;
P.S.
кстати а почему я не могу объявить константный статический метод?
static typedef type() const;
выдает ошибку
Язык С++ - строго типизированный, так что во время выполнения такое не делается, только во время компиляции. А тут все просто - например,
class myClass
{
public:
struct myData
{};
using type = myData;
};
vector<myClass::type> data;
myClass object;
vector<decltype(object)::type> obj_data;
Ну, а второй вопрос (кстати, ну не надо разнотипные вопросы в один объединять) - так а к чему ваше const
должно относиться? Объекта-то у статической функции нет... Вас же не удивляет, что вы не можете объявить константную функцию, которая не изменяет глобальные переменные? :)
А зачем усложнять?
class myClass
{
//
public:
struct myData {};
//...
};
std::vector<typename myClass::myData > v;
После того, как вы отправили ссыльку на задачу. Допустим имеем:
struct CDataCompact { ... };
class CDataCompactParser {
static CDataCompact d;
public:
static CDataCompact get_data() { return d; }
//...
};
CDataCompact CDataCompactParser::d = CDataCompact();
Чтобы статический метод возвращал обьект данного типа, класс должен иметь статический обьект этого типа. (Выше указан случай, если структура обьявлена в классе).
Дальше, если вы обьявляете шаблонный класс с двумя аргументами шаблона, то вы никак не сможете потом инстанцировать с одним аргументом.
template<class IExtractor, class IData>
class CExtractor
{
//...
};
Другое дело, если вы определите другой шаблонный класс :
template<class T, class V = decltype(T::get_data()) >
class CExtractor_1 {... } ;
Или
template<class T> class
CExtractor_1 : public CExtractor<T, decltype(T::get_data()) >{};
Тогда вы легко можете использовать CExtractor_1<CDataCompactParser>
вмеcто CExtractor<CDataCompactParser, CDataCompact>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте!
Поскольку когда мучаю читателей этого сайта мелкими задачами и часто возникает вопрос "зачем", то решил описать сразу и большую задачу, с которой...
Сейчас делаю задачу из интернета,основная цель используя оператор switch, составить программу для получения таблицы значений функции У для...
Пытаюсь вывести имя нового USB-девайса, когда его подключаютПроблема в том, что при вставке флешки messagebox появляется, но на нем ничего нет