С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
1

вопрос по синтаксису/типам

01.11.2011, 11:01. Показов 921. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
фрагмент файла unique_ptr.h:
C++
1
2
3
4
5
6
7
  template <typename _Tp, typename _Tp_Deleter = default_delete<_Tp> > 
    class unique_ptr
    {
      typedef std::tuple<_Tp*, _Tp_Deleter>  __tuple_type;
      typedef __tuple_type unique_ptr::*     __unspecified_bool_type;
      typedef _Tp* unique_ptr::*             __unspecified_pointer_type;
      ....
Вот со строчкой
C++
1
typedef std::tuple<_Tp*, _Tp_Deleter>  __tuple_type;
все понятно, __tuple_type, значит, будет отныне синонимом для шаблонного класса std::tuple<_Tp*, _Tp_Deleter>, который уже где-то в стандартных хедерах был определен. А вот что означают две следующие строки
C++
1
2
typedef __tuple_type unique_ptr::*     __unspecified_bool_type;
typedef _Tp* unique_ptr::*             __unspecified_pointer_type;
я что-то понять не могу, что за тип такой __tuple_type unique_ptr::* или _Tp* unique_ptr::* ? То есть, это какой-то совершенно неведомый мне раздел синтаксиса языка, я прежде никогда не слышал о таких синтаксических конструкциях. Рад был бы погуглить, но даже не представляю, что здесь гуглить.
Подскажите, знающие люди.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.11.2011, 11:01
Ответы с готовыми решениями:

Вопрос по синтаксису С++
Изучаю с++ по книге Джесса Либерти &quot; Освой самостоятельно С++ за 21 день&quot; Он в начале главы пишет...

Вопрос по синтаксису
Народ подскажите где можно прочесть про такие фишки. или растолкуйте почему индекс и имя массива...

Вопрос по типам
фрагмент файла unique_ptr.h: template &lt;typename _Tp, typename _Tp_Deleter =...

Вопрос по синтаксису языка
Народ, всем привет!!! Вопрос такой: есть 2 класса, как вставить в класс Prizm функцию friend void...

1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
01.11.2011, 17:08 2
Цитата Сообщение от yekka Посмотреть сообщение
я что-то понять не могу, что за тип такой __tuple_type unique_ptr::* или _Tp* unique_ptr::* ?
Это указатель на член класса. Простой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
struct A
{
    int i;
    std::string s;
};
 
int main()
{
    typedef int A::* i_ptr;
    typedef std::string A::* s_ptr;
 
    i_ptr p1 =  &A::i;
    s_ptr p2 =  &A::s;
 
    A a = {1, "text"};
 
    std::cout << a.*p1 << '\n';
    std::cout << a.*p2 << '\n';
 
    return 0;
}
Ну и немного более сложный пример c созданием функтора для сортировки массива структур по полям:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <string>
#include <functional>
#include <algorithm>
 
// функтор
template
<
    typename StructType,
    typename MemberType
>
class StructMemberLessCmp : std::binary_function<StructType, StructType, bool>
{
    private:
        typedef MemberType StructType::* member_ptr_type;
 
 
    private:
        member_ptr_type p_;
 
    public:
        StructMemberLessCmp(member_ptr_type p)
            : p_(p)
        {
        }
 
        bool operator()(const StructType &a, const StructType& b) const
        {
            return a.*p_ < b.*p_;
        }
};
 
//---------------
 
struct A
{
    int i;
    std::string s;
};
 
int main()
{
    const size_t n = 5;
    A a[n] =
    {
        {1, "a"},
        {4, "c"},
        {2, "d"},
        {5, "b"},
        {3, "e"}
    };
 
    // сортируем массив структур по полю int i и выводим на экран
    std::sort(a, a + n, StructMemberLessCmp<A, int>(&A::i));
    for(size_t i = 0; i < n; ++i)
        std::cout << a[i].i << ' ' << a[i].s << '\n';
    std::cout << '\n';
 
    // сортируем массив структур по полю std::string s и выводим на экран
    std::sort(a, a + n, StructMemberLessCmp<A, std::string>(&A::s));
    for(size_t i = 0; i < n; ++i)
        std::cout << a[i].i << ' ' << a[i].s << '\n';
    std::cout << '\n';
 
    return 0;
}
Добавлено через 3 часа 2 минуты
Забыл указать public при наследовании
C++
1
class StructMemberLessCmp : public std::binary_function<StructType, StructType, bool>
4
01.11.2011, 17:08
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2011, 17:08
Помогаю со студенческими работами здесь

вопрос по типам даных
у меня проблема такого типа мне надо вывести корень чисел для 4 типов даных - double,int,long,float...

Перегрузка операции индексирования, вопрос по синтаксису
Здравствуйте форумчане. Должна сразу сказать, что в своей практике с С++ сталкивалась мало,...

Подскажите по синтаксису
привет. Пытаюсь разобраться в коде например, чем |= отличается от обычного равенства ...

Подскажите по синтаксису for
Нашел в интернете пример кода с регулярными выражениями bool found; cmatch m; try...

Пояснение по синтаксису
только не надо гнать в гугл, я не могу там найти, т.к. не могу правильно сформировать запрос... ...

Подскажите хороший справочник по синтаксису
Подскажите хороший справочник по синтаксису &quot;С&quot;, ато во всём, что скачиваю чаще-всего одна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru