Форум программистов, компьютерный форум CyberForum.ru

непонятная конструкция, шаблоны - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Структура отрезок. http://www.cyberforum.ru/cpp-beginners/thread337576.html
Как сделать правильней и красивее на ваш взгляд - struct tPoint { int x, y; }; struct tSegment { tPoint pt1, pt2; };
C++ Аргументы функции Вопрос на счет аргументов функции в С++. есть такая функция: void Teleport(Player* pPlayer, float array) { int i = 0; pPlayer->TeleportTo(massive, massive, massive, massive, massive); } (pPlayer является экземпляром заранее реализованного объекта, он обозначает игрока, TeleportTo реализована заранее, принимает пять аргументов (uint32 mapID, float X, float Y, float Z, float... http://www.cyberforum.ru/cpp-beginners/thread337569.html
C++ Ошибка ввода
После введения названия книги программа аварийно завершается. В чем проблема ? #include<iostream> #include<windows.h> #include<stdlib.h> using namespace std; class publications {protected: char b; float c;
Непонятка с заголовочными файлами C++
game.h #ifndef _GAME_H_ #define _GAME_H_ #include <gl\gl.h> #include <gl\glu.h> #pragma comment (lib, "opengl32.lib") #pragma comment (lib, "glu32.lib")
C++ Программа, которая переводит числа в слова http://www.cyberforum.ru/cpp-beginners/thread337519.html
Здрасти всем. Есть код: #include <conio.h> #include <stdio.h> #include <iostream> #include <stdlib.h> string NumericToString(int n)
C++ Указатели в C++. Я никак не могу понять чем отличаются следующие объявления: int const * pTemp; const int * pTemp; И вот еще что не понятно: const char = "Some string" char const = "Some other string"; Еще в одном исходнике видел: int const iTemp; подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
31.07.2011, 10:41     непонятная конструкция, шаблоны
Цитата Сообщение от LosAngeles Посмотреть сообщение
столкнулся со странной конструкцией
C++
1
template<typename C> static One test(int C::*);
в
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
class IsClassT {
  private:
    typedef char One;
    typedef struct { char a[2]; } Two;
    template<typename C> static One test(int C::*);
    
    template<typename C> static Two test(...);
  public:
    enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 };
    enum { No = !Yes };
};
в упор не понимаю, что значит int C::*
видел объяснения на русском, на инглише, что это мол какой-то указатель на член, всё равно не догоняю. Может кто-нибудь доходчиво объяснить или хотя привести примеры зачем это нужно ну кроме как здесь? Всё остальное понятно, мне бы этот момент главное прояснить. Заранее спасибо
Наконец-то я понял, о чем речь. Пример этот - шаблон для определения на этапе компиляции, является ли тип T классом.
Объяснить, как работает - сложно. Надо медитировать на SFINAE.
Но суть в том, что при инстанцировании
C++
1
enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 };
для класса инстанцируется One test, а для не класса - Two test именно потому, что у класса есть элементы, а у не класса - элементов нет.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru