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

Специализация метода темплейтного класса вложенного в темплейтный класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
OpenGL OpenGL, трехмерный график http://www.cyberforum.ru/cpp-beginners/thread1497375.html
Начинаю по чуть-чуть изучать программирование , попалась для меня немного странная задачка , нужно вывести график функции z=cos(r)/r , но при этом r=sqrt((x^2)*(y^2)). выдает много ошибок , прошу помощи в их исправление или советов. #include<openGL/gl.h> #include<Glut/glut.h> #include <math.h> #include <stdlib.h> float f(float x, float y , float r , float z) { return...
C++ Крестики-нолики - алгоритм для игры против ПК Смотрю, уже только ленивый не сделал. Собственно это я. Вчера сел, написал свои 200 строк какашкокода для любого поля с любым количеством требуемых чисел для победы по всем направлениям.. С победой пришлось повозиться, но все вышло. Собственно, куда смотреть в отношении алгоритма для игры против ПК? Очевидно, что рандом так себе играет. Пока есть следующий вариант: if Проверить возможность... http://www.cyberforum.ru/cpp-beginners/thread1497338.html
Запись двумерного массива в файл C++
В общем нужно записать двумерный массив в фаил, но что то ни как не получается. //magicQuad.h #ifndef MAGICQUAD_H #define MAGICQUAD_H #include <iostream> using std::cout; using std::endl; class magicQuad {
C++ OpenGL: Вывести значения двух функций
Пытаюсь разобраться с opengl , хотел вывести две функции , но выдает ошибку , подскажите как исправить. #include <iostream> #include<openGL/gl.h> #include<Glut/glut.h> void draw() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1, 0, 0);
C++ Работа с динамическими символьными массивами и строками переменной длины http://www.cyberforum.ru/cpp-beginners/thread1497312.html
Здравствуйте! НЕ могу решить проблему из-за которой программа летит коту под хвост) Задача программы в том, чтобы по заранее заданным в поле номерам считать файлы с именами схожей конструкции: file1.dat .... file230.dat. То есть при каждой следующей итерации имя файла меняется, с ним производятся действия он закрывается. Поэтому требуется создавать массив имени файла. Проблема в том, что при...
C++ Что такое __pragma(warning()) ? Вот код макроса: #define PTM_WARNING_DISABLE \ __pragma(warning( push )) \ __pragma(warning( disable : 4867 )) Что эти функции делают? И что это за функция __pragma? От ее определение нельзя посмотреть? подробнее

Показать сообщение отдельно
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
13.07.2015, 13:47     Специализация метода темплейтного класса вложенного в темплейтный класс
Цитата Сообщение от Vlad1slav Посмотреть сообщение
Это то что мне было нужно)
Ага. Идиома называется CRTP.

А вообще, последний пост автора как раз хорошо свидетельствует о том, насколько важно сразу детально описывать свою задачу
Хорошо заданный вопрос - половина ответа (а то и весь).

Добавлено через 23 часа 42 минуты
Цитата Сообщение от Vlad1slav Посмотреть сообщение
Это то что мне было нужно)
Кстати, этот пример, который является "тем, что нужно" очень легко использовать неправильно. Я не говорю, что именно в этом случае он так используется, но эту задачу можно решить лучше.
Первый вариант:
Кликните здесь для просмотра всего текста
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
template <typename T1>
class A
{
public:
   class Base
   {
   public:
       void f2(); /* Do smg2 */
       void f3(); /* Do smg3 */
   };
 
   template <bool, typename = void>
   class B : public Base
   {
   public:
       void f1(); /* Do smg1 */
   };
 
   template <typename Dummy>
   class B<false, Dummy> : public Base
   {
   public:
       void f1(); /* Do smg1_else */
   };
};

Второй вариант (наоборот):
Кликните здесь для просмотра всего текста
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
template <typename T1>
class A
{
public:
   template <bool F, typename = void>
   struct Base
   {
       void f1(); /* Do smg1 */
   };
 
   template <typename Dummy>
   struct Base<false, Dummy>
   {
       void f1(); /* Do smg1 else */
   };
 
   template <bool F>
   class B : Base<F>
   {
   public:
       using Base<F>::f1;
 
       void f2(); /* Do smg2 */
       void f3(); /* Do smg3 */
   };
};

При этом работаем мы всегда с типом B. Base как бы за кадром.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru