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

О специализации шаблона: почему код компилируется? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ "Защита от дурака" числа с плавающей запятой http://www.cyberforum.ru/cpp-beginners/thread927140.html
Какие есть способы для защиты от ввода чисел с плавающей точкой(запятой) ?
C++ Visual studio не пашет Постоянные проблемы с этим компилятором. Даже следующий код он может откомпилировать нормально, а когда на следующий день ты пишешь его в другой программе, то он не пашет Бывает пишу программу, постоянно выдает ошибки компилятор, потом я беру, создаю проект заново, и все норм. Что за фигня? Пример кода, который вчера работал, а сегодня компилятору он не нравится: #include "stdafx.h"... http://www.cyberforum.ru/cpp-beginners/thread927137.html
Почемуто всеравно выходить true = 1 C++
#include <iostream> using namespace std; int main() { bool boolean = 260; if (boolean){ cout <<"true = "<<boolean<<endl; } else{
C++ как понять Диапазон принимаемых значений?
Помогите пожалуйста я не могу понять слово Диапазон принимаемых значений! Заранее Спасибо!
C++ Решето Эратосфена http://www.cyberforum.ru/cpp-beginners/thread927090.html
В решете эратосфена из книги в условии есть непонятная вещь: if (i * 1ll * i <= n) - возле единицы для непонятных знака, на форуме они почти такие как ||, но в visual studio они похожи на единицы. Заменил на единицы, алгоритм перестал правильно работать, что это за знаки?. А вот и вся программа: #include<iomanip> #include<iostream> #include<vector> #include<fstream> using namespace std; ...
C++ не считает простых формул есть задание нужно прочитать бесконечно определенные формулы. код написал но он не считает почему то немугу разобраться... int main(){ int D=50, R=200, V=194, xs=0, ys=0, t=0; float a1,a2,x,y; for(t;t<=60;t++) { a1=atan(D/R); a2=atan(D/(R-V*t)); x=xs+((V*t*tan(a2))/(tan(a2)-tan(a1))); подробнее

Показать сообщение отдельно
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
22.07.2013, 17:20     О специализации шаблона: почему код компилируется?
Добрый день.
Вроде бы, по правилам специализации шаблонов, можно только уточнять поведение шаблонного класса, но нельзя изменять его структуру. Однако, приведенный ниже код успешно компилируется и правильно работает:
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
template <typename T>
struct A
{
   //Пустой класс 
};
 
template <>
struct A<float>
{
    static std::function<void()> f;
};
 
std::function<void()> A<float>::f = [](){std::cout<<"float specialized\n";};
 
template <>
struct A<double>
{
    static std::function<void()> f;
};
 
std::function<void()> A<double>::f = [](){std::cout<<"double specialized\n";};
 
int main()
{
    A<float> ob1;
    A<double> ob2;
    ob1.f();
    ob2.f();
}
Использую компилятор gcc 4.7. Как это объяснить и стоит ли так делать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru