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

Как сделать шаблон, с параметром-классом - потомком определённого класса? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести на экран дату следующего дня http://www.cyberforum.ru/cpp-beginners/thread430532.html
ребят помогите пожалуйста с кодом, Ввести дату в формате ДД,ММ,ГГГГ.Вывести на экран дату следующего дня заранее спасибо.с языком си туго очень
C++ Eclipse: Symbol 'cout' could not be resolved Поставил себе Эклипс для общего развития, так сказать, но не могу разобраться, чего он хочет от меня. такой код: #include <iostream> using namespace std; int main() { cout << "Hello World" << endl; return 0; } http://www.cyberforum.ru/cpp-beginners/thread430531.html
C++ Сформировать новый массив из двух исходных по данному правилу
Даны два одномерных массива A и B размерности 12. Вычислить массив C, если известно, что первый элемент этого массива равен сумме первого элемента массива A и последнего элемента массива B, второй элемент массива C равен сумме второго элемента массива A и предпоследнего элемента массива B и т.д. Вывести на экран первый и последний элементы массива C.
не могу понять,почему не идет C++
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <math.h> struct crs Matrix { int N; int Nz; double*value;
C++ Сортировка списка по убыванию http://www.cyberforum.ru/cpp-beginners/thread430497.html
Не работает ListNode<NODETYPE> *currentPtr=firstPtr, *current1Ptr=firstPtr, *XPtr=0; while(currentPtr->nextPtr!=0) { while(current1Ptr->nextPtr!=0) { if (current1Ptr->data>current1Ptr->nextPtr->data) {
C++ Определить сумму элементов матрицы, расположенных на главной диагонали Ввести статическую матрицу размером 4x4. Определить сумму элементов матрицы, расположенных на главной диагонали матрицы и произведение элементов, расположенных на побочной диагонали матрицы. Пока только это написала: #include <iostream> using namespace std; int main() { подробнее

Показать сообщение отдельно
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
19.01.2012, 17:45     Как сделать шаблон, с параметром-классом - потомком определённого класса?
Цитата Сообщение от lemegeton Посмотреть сообщение
Цитата Сообщение от cyberguz Посмотреть сообщение
Если вычисляется при компиляции - какой смысл проверять при выполнении? Чтобы позже обнаружить ошибку?
Например, чтобы вообще хоть когда-нибудь её обнаружить. )
зачем вам обнаруживать при выполнении то, что вычислено при компиляции, если это можно (и нужно) обнаружить при компиляции?

Добавлено через 17 минут
иными словами, зачем делать так
Цитата Сообщение от lemegeton Посмотреть сообщение
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 <stdexcept>
 
template<typename Base, typename Derived>
struct is_base_of {
 private:
  static Derived* m_d;
  static char check( Base* );
  static long check( ... );
 public:
  enum {
    value = ( sizeof(check( m_d )) == sizeof(char) )
  };
};
 
class A {};
class B : public A {};
class D {};
 
int main(int argc, char *argv[]) {
  if (!is_base_of<A, B>::value) // вычисляется compiletime
    throw std::runtime_error("Ouch. B is not a descedant of A."); // проверяется runtime
  if (!is_base_of<A, D>::value)
    throw std::runtime_error("Ouch. D is not a descedant of A.");
}
А вот как сделать эту проверку compile-time -- без понятия.
если можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<typename Base, typename Derived>
struct is_base_of {
 private:
  static Derived* m_d;
  static char check( Base* );
  static long check( ... );
 public:
  enum {
    value = ( sizeof(check( m_d )) == sizeof(char) )
  };
};
 
class A {};
class B : public A {};
class D {};
 
int main(int argc, char *argv[]) {
  static_assert(std::is_base_of<A, B>::value, "Ouch. B is not a descedant of A.");
  static_assert(std::is_base_of<A, D>::value, "Ouch. D is not a descedant of A.");
}
Добавлено через 5 минут
Цитата Сообщение от lemegeton Посмотреть сообщение
Цитата Сообщение от Nick Alte Посмотреть сообщение
static_assert(std::is_base_of<Interface, InterfaceImplementation>::value, "Параметр должен быть потомком Interface");
1. Требуется новый стандарт или буст,
2. Это будет проверка времени выполнения, а не компиляции.
Цитата Сообщение от lemegeton Посмотреть сообщение
А вот как сделать эту проверку compile-time -- без понятия.
вот не пойму я: то вам нужна проверка времени выполнения, то compile-time... что вам нужно то вообще?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru