Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Явное воплощение шаблонной функции 
V
    Опции темы
Brodyaga
Дата 28.7.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Без разницы из чего она вытекает, фраза была полной и носила конкретный смысл. В правильно сформулированном виде эта фраза однозначна и не зависит от контекста.

Только если эту фразу рассматривать отдельно то может быть, но так как она была в общем разговоре, то ответ на эту фразу отдельно не имеет никакого значения. Фраза имеет смысл только со всеми предыдущими фразами.

Цитата

про расширение cpp файла.

Повторю вопрос...
Про расширение КАКОГО ИМЕННО файла вы говорите поясняйте пожалуйста?

Цитата

Повторяюсь, CPP файл твой компилятор КОМПИЛИРУЕТ, потому при линковке у класса получается два конструктора
1 - в myclass.cpp
2 - в myclassinst.cpp
а .h файл компилятор игнорирует и не компилирует.

я всё ПРЕКРАСНО понимаю. Объясните что конкретно вы предлагаете сделать и понятнее.(Если есть предложения кроме как размещать всё в h файле). Под ПОНЯТНЕЕ я имею ввиду привести ИМЯ файла в котором нужно поменять расширение или инклуд(если второе, то на какой инклуд).
PM MAIL   Вверх
azesmcar
Дата 28.7.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Brodyaga @  28.7.2009,  10:51 Найти цитируемый пост)
Только если эту фразу рассматривать отдельно то может быть, но так как она была в общем разговоре, то ответ на эту фразу отдельно не имеет никакого значения. Фраза имеет смысл только со всеми предыдущими фразами.

Совершенно неохота спорить. Твое желание правильно реализуется с помощью экспорта шаблонов, о котором я и написал. Не нравиться ответ - игнорируй. В мои обязанности не входит предоставление 100% точной информации. Отвечаю насколько позволяет время по собственному желанию.

Цитата(Brodyaga @  28.7.2009,  10:51 Найти цитируемый пост)
Про расширение КАКОГО ИМЕННО файла вы говорите поясняйте пожалуйста?

про расширение myclass.cpp, cpp файла который ты инклудишь и компилируешь.

Цитата(Brodyaga @  28.7.2009,  10:51 Найти цитируемый пост)
я всё ПРЕКРАСНО понимаю. Объясните что конкретно вы предлагаете сделать и понятнее.

 smile я что так непонятно выражаюсь?
1. Я предлагаю писать шаблонные функции в заголовочном файле (это я рекомендую, это не криво. Так написан весь STL)
2. Если не хочешь - я предлагаю сменить расширение своего файла (myclass.cpp) на myclass.h например или убери его из проекта вообще, чтобы не компилировался. (правый клик мышки на файле в solution explorer, rename/delete).
PM   Вверх
Brodyaga
Дата 28.7.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Совершенно неохота спорить. Твое желание правильно реализуется с помощью экспорта шаблонов, о котором я и написал. 

дык какой мне смысл от ответа на одну фразу из всего разговора, которая сама по себе отдельно для меня не интересна?
Цитата

В мои обязанности не входит предоставление 100% точной информации.

я и не говорю что ты обязан.
Ладно.. замяли, действительно бесполезный спор.

Цитата

про расширение myclass.cpp, cpp файла который ты инклудишь и компилируешь.

вот теперь ясно что про myclass а не myclassinst.

Цитата

я что так непонятно выражаюсь?

Сейчас , после того как пояснил нормально всё понятно.

Итоги:
Цитата

1. Я предлагаю писать шаблонные функции в заголовочном файле (это я рекомендую, это не криво. Так написан весь STL)

Этот вариант рабочий, но мне почему то не нравится. Ессно я сделаю так если по другому не получится.

Цитата

2. Если не хочешь - я предлагаю сменить расширение своего файла (myclass.cpp) на myclass.h

Если ты имеешь ввиду в файле myclassinst сменить инклуд myclass.cpp на myclass.h, то я говорю, что так работать не будет. Студия ругается на то что шаблон явно не инстанцирован.

Цитата

или убери его из проекта вообще, чтобы не компилировался.

Так работает тоже. но так уж точно както криво.


А как вы относитесь к варианту добавить строки 
template ClassA* MyClass::MyFunc<ClassA>(ClassA* object);
template ClassB* MyClass::MyFunc<ClassB>(ClassB* object);
в файл myclass.cpp ?
PM MAIL   Вверх
azesmcar
Дата 28.7.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Brodyaga @  28.7.2009,  12:30 Найти цитируемый пост)
Этот вариант рабочий, но мне почему то не нравится. Ессно я сделаю так если по другому не получится.

Очень зря, это вполне нормально.

Цитата(Brodyaga @  28.7.2009,  12:30 Найти цитируемый пост)
Если ты имеешь ввиду в файле myclassinst сменить инклуд myclass.cpp на myclass.h, то я говорю, что так работать не будет. Студия ругается на то что шаблон явно не инстанцирован.

Не совсем понял о чем речь.

Цитата(Brodyaga @  28.7.2009,  12:30 Найти цитируемый пост)
Так работает тоже. но так уж точно както криво.

Конечно криво. Смотри.
Что делает include? ничего особенного, просто берет содержимое одного файла и копирует в другой (грубо говоря). Т.е. вместо
#include "myclass.cpp"
у тебя будет содержимое файла myclass.cpp и дальше какие-то строки, не важно. Что у тебя в файле myclass.cpp? 
Код

MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}

остальное не важно.
Получается что компилятор компилирует два файла
myclass.cpp и myclassinst.cpp в обоих из них во время компиляции (поскольку include препроцессорная директива, она работает до компиляции) будет ДВА тела конструктора и деструктора. Для компилятора это не проблема, потому как он компилирует каждый cpp файл по отдельности и делает из них obj файлы. А потом наступает очередь линкера, он соединяет эти два obj файла и видет в обоих из них тело конструктора и деструктора того же класса. Потому и ошибка "already defined".
Это о причине возникновения ошибки. Теперь о решении
Если писать объявление в заголовочном файле а тело в cpp - это нормально, но в случае с шаблонным классом или функциями этого сделать не получиться (как я уже сказал, экспорт шаблонов). А делать include cpp файл неправильно. Если хочешь просто разделить их, сделай два .h файла.
myclass.h и myclass_impl.h и включай у себя в программе только myclass_impl.h (который в свою очередь включает myclass.h. Так ты просто разделишь их на два файла.
Вот так.

Это сообщение отредактировал(а) azesmcar - 28.7.2009, 12:45
PM   Вверх
Леопольд
Дата 28.7.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Brodyaga, вот небольшой пример.

Код

#include <iostream>

class Base{
    int data;
public:
    virtual void foo(int i = 0) = 0;
};

class Child: public Base{
public:
    virtual void foo(int i = 1){
        std::cout<<"Child::foo::i = "<<i<<std::endl;
    }
};



int main(int argc, char* argv[])
{
    Child obj;
    Base& ref = obj;

    ref.foo();
    obj.foo();
}


Вывод:
Код

Child::foo::i = 0
Child::foo::i = 1


Подсказка: функции линкуются динамически, аргумент по умолчанию статически.
Если подсказка не объясняет почему так происходит, значит надо уделить немного внимания линковке

Судя по Вашим топикам, Вы очевидно не знаете что такое ODR - One Definition Rule (Правило Одного Определения)


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Brodyaga
Дата 28.7.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Цитата

Если ты имеешь ввиду в файле myclassinst сменить инклуд myclass.cpp на myclass.h, то я говорю, что так работать не будет. Студия ругается на то что шаблон явно не инстанцирован.

Не совсем понял о чем речь.

ну если ты предлагаешь файл myclassinst.cpp сделать таким:
Код

#include "myclass.h"    //вместо myclass.cpp

#include "ClassA.h"
#include "ClassB.h"

template ClassA* MyClass::MyFunc<ClassA>(ClassA* object);
template ClassB* MyClass::MyFunc<ClassB>(ClassB* object);

то так работать не будет.

Цитата

Смотри.
Что делает include? ничего особенного, просто берет содержимое одного файла и копирует в другой (грубо говоря). Т.е. вместо
#include "myclass.cpp"
у тебя будет содержимое файла myclass.cpp и дальше какие-то строки, не важно. Что у тебя в файле myclass.cpp? 

Код

MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}



остальное не важно.
Получается что компилятор компилирует два файла
myclass.cpp и myclassinst.cpp в обоих из них во время компиляции (поскольку include препроцессорная директива, она работает до компиляции) будет ДВА тела конструктора и деструктора. Для компилятора это не проблема, потому как он компилирует каждый cpp файл по отдельности и делает из них obj файлы. А потом наступает очередь линкера, он соединяет эти два obj файла и видет в обоих из них тело конструктора и деструктора того же класса. Потому и ошибка "already defined".
Это о причине возникновения ошибки.

Это я уже понял после поста UnrealMan'а smile

Цитата

Если писать объявление в заголовочном файле а тело в cpp - это нормально, но в случае с шаблонным классом или функциями этого сделать не получиться (как я уже сказал, экспорт шаблонов)

в случае с шаблонным классом получается как раз таки через способ что я приводил в каком то из предыдущих постов.

Цитата

А делать include cpp файл неправильно

Вот гдето я видел что так делается, поэтому и так сделал у себя... К сожаление не смог сейчас найти где это видел.. так что соглашусь.

А как всё-таки вам способ с включением строк
Код

template ClassA* MyClass::MyFunc<ClassA>(ClassA* object);
template ClassB* MyClass::MyFunc<ClassB>(ClassB* object);


в файл myclass.cpp ?
PM MAIL   Вверх
azesmcar
Дата 28.7.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Brodyaga @  28.7.2009,  14:15 Найти цитируемый пост)
ну если ты предлагаешь файл myclassinst.cpp сделать таким:

Я этого не предлагал.
Я только две вещи предложил, оба с этим не имеют ничего общего.

Цитата(azesmcar @  28.7.2009,  11:01 Найти цитируемый пост)
1. Я предлагаю писать шаблонные функции в заголовочном файле (это я рекомендую, это не криво. Так написан весь STL)
2. Если не хочешь - я предлагаю сменить расширение своего файла (myclass.cpp) на myclass.h например или убери его из проекта вообще, чтобы не компилировался. (правый клик мышки на файле в solution explorer, rename/delete). 


Цитата(Brodyaga @  28.7.2009,  14:15 Найти цитируемый пост)
в случае с шаблонным классом получается как раз таки через способ что я приводил в каком то из предыдущих постов.

нет, мы говорим о разных вещах. Почитай о translation юнитах.

Цитата(Brodyaga @  28.7.2009,  14:15 Найти цитируемый пост)
Вот гдето я видел что так делается, поэтому и так сделал у себя... К сожаление не смог сейчас найти где это видел.. так что соглашусь.

Ну мало ли кто как пишет. Всего повторять не надо, даже микрософтовские заголовки и функции зачастую не пример для подражания.
Хочешь пример качественного кода? Смотри boost smile 

Цитата(Brodyaga @  28.7.2009,  14:15 Найти цитируемый пост)
А как всё-таки вам способ с включением строк

Я только ЗА 1-ый вариант, включить все в заголовочный файл.
Ну или хотя бы вот этот
Цитата(azesmcar @  28.7.2009,  12:42 Найти цитируемый пост)
Если хочешь просто разделить их, сделай два .h файла.
myclass.h и myclass_impl.h и включай у себя в программе только myclass_impl.h (который в свою очередь включает myclass.h. Так ты просто разделишь их на два файла.


PM   Вверх
Brodyaga
Дата 28.7.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

в случае с шаблонным классом получается как раз таки через способ что я приводил в каком то из предыдущих постов.


ну вот же я указывал...
myclass.h
Код

template<class T>
class MyClass
{
public:
   MyClass();
   ~MyClass();
   static T* MyFunc(T*);
};


myclass.cpp
Код

template <class T>
MyClass<T>::MyClass()
{
}
template <class T>
MyClass<T>::~MyClass()
{
}
template <class T>
T* MyClass<T>::MyFunc(T* object)
{
 return null;
}



myclassinst.cpp
Код

/*Файл реализующий "модель явного воплощения" для организации кода с шаблонами*/
#include "StdAfx.h"
#include "myclass.cpp"
#include "ClassA.h"
#include "ClassB.h"
//Набор директив явного воплощения
template MyClass<ClassA>;
template MyClass<ClassB>;


Шаблонный класс разнесён на определение и реализацию. и явное инстанцирование применяю и всё работает!

Зачем тогда вообще явное инстанцирование нужно, если вы говорите, что надо просто тупо помещать всё в h файл и всё ок без него работает!??!
PM MAIL   Вверх
azesmcar
Дата 28.7.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Brodyaga @  28.7.2009,  14:59 Найти цитируемый пост)
Зачем тогда вообще явное инстанцирование нужно, если вы говорите, что надо просто тупо помещать всё в h файл и всё ок без него работает!??! 

В C++ есть много чего, что не используется на практике. Хотя бы потому, что надобности нет. Ну вот объясни мне, зачем в твоем случае это нужно? Что это тебе дает кроме проблем? (проблема в том, что вместо того чтобы дописать код, ты целый день это обсуждаешь..ну чем не проблема?). Тебе обязательно надо использовать все возможности, которые дает C++ в одной своей программе? Скажи мне о преимуществах твоего варианта по отношению к моему (как ты выразился: тупо поместить все в .h файле).

Это сообщение отредактировал(а) azesmcar - 28.7.2009, 15:12
PM   Вверх
Леопольд
Дата 28.7.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(Brodyaga @ 28.7.2009,  14:59)
#include "myclass.cpp"
...
Шаблонный класс разнесён на определение и реализацию. и явное инстанцирование применяю и всё работает!

Зачем тогда вообще явное инстанцирование нужно, если вы говорите, что надо просто тупо помещать всё в h файл и всё ок без него работает!??!

Это абсолютно тоже самое, что полностью перенести весь файл myclass.cpp в myclass.h и сделать #include "myclass.h"
Brodyaga, почитай про раздельную компиляцию, дело говорю.  smile 

Какая здесь связь, между явным инстанцированием и вынесением реализации шаблонов в отдельный модуль (которая почти ничем не поддерживается)??? Зачем вообще применять явное инстанцирование без насущной необходимости???

Это сообщение отредактировал(а) Леопольд - 28.7.2009, 17:55


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Леопольд
Дата 28.7.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Brodyaga, сможешь объяснить почему foo<int>() выводит 0, а foo<char>() выводит 1?
first.h
Код

#ifndef FIRST_H
#define FIRST_H
#include <iostream>

static int i = 0;
void set_i(int);

template<typename T>
void foo(void){
    std::cout<<i<<std::endl;
}

#endif


main.cpp
Код

#include "first.h"

int main(void){
    set_i(1);
    foo<int>();
    foo<char>();
 }


first.cpp
Код

#include "first.h"

template void foo<char>(void);

void set_i(int i_){
    i = i_;
}


Это сообщение отредактировал(а) Леопольд - 28.7.2009, 18:11


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Brodyaga
Дата 29.7.2009, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

(проблема в том, что вместо того чтобы дописать код, ты целый день это обсуждаешь..ну чем не проблема?)

Этот код я всеровно сейчас не пишу, другим пока занимаюсь. Поэтому можно и пообсуждать smile

Цитата

Скажи мне о преимуществах твоего варианта по отношению к моему (как ты выразился: тупо поместить все в .h файле).

Ну положено же разносить определение и реализацию в разные файлы. В моём случае так и получается. А то както некрасивше, когда некоторые классы разнесены, а не которые нет...

Цитата

Какая здесь связь, между явным инстанцированием и вынесением реализации шаблонов в отдельный модуль (которая почти ничем не поддерживается)???

Конкретно между ними - никакой. Просто я хочу и то и то сделать. Я не говорю что явное инстанцирование это обязательно разнесение! Я говорю что с помощью него можно сказать компилятору какое воплощение будет у шаблона, если шаблон разнесён по файлам, так как если шаблон в одном файле, то не надо говорить компилятору какое воплощение будет.
PM MAIL   Вверх
azesmcar
Дата 29.7.2009, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Brodyaga @  29.7.2009,  07:29 Найти цитируемый пост)
Ну положено же разносить определение и реализацию в разные файлы. 

Кто это так положил? Для шаблонных функций и классов так не положено, я об этом твержу 2 страницы. Посмотри как сделан boost, STL. Не положено так. Но раз тебя это так заботит, скажи мне зачем так положено?
Почему лучше разносить определение и реализацию в разные файлы? Что это дает и почему так рекомендуется?

Цитата(Brodyaga @  29.7.2009,  07:29 Найти цитируемый пост)
А то както некрасивше, когда некоторые классы разнесены, а не которые нет...

Не вижу ничего некрасивого.
PM   Вверх
Леопольд
Дата 29.7.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(Brodyaga @ 29.7.2009,  07:29)
Ну положено же разносить определение и реализацию в разные файлы. В моём случае так и получается. А то както некрасивше, когда некоторые классы разнесены, а не которые нет...

Brodyaga, это не так. Дело не в том что положено, а в том как тебе нужно.

Следующий пример содержит ошибки, потому-что static функции линкуются статически - на этапе компиляции (однако, это не относится к static методам (функциям) класса). Функции с квалификатором inline - вообще отдельная тема. Если же убрать вызовы foo1 и foo2 из main, то всё будет работать. Что бы узнать почему так, читай про раздельную компиляцию.

header.h
Код

static void foo1(int&);
inline void foo2(int&);
void foo3(int&);

second.cpp
Код

#include "header.h"
static void foo1(int& i){
    ++i;
}

inline void foo2(int& i){
    ++i;
}

void foo3(int& i){
    foo1(i);
    foo2(i);
}


first.cpp
Код

#include "header.h"

int main(int argc, char* argv[])
{
    int i = 0;
    foo1(i); //error
    foo2(i); //error
    foo3(i); //OK
}


Заметил, что ты всё же мельком просматриваешь мои посты. Рекомендую уделить им чуть больше внимания.

Добавлено через 13 минут и 50 секунд
Цитата(Brodyaga @ 29.7.2009,  07:29)
Конкретно между ними - никакой. Просто я хочу и то и то сделать. Я не говорю что явное инстанцирование это обязательно разнесение! Я говорю что с помощью него можно сказать компилятору какое воплощение будет у шаблона, если шаблон разнесён по файлам, так как если шаблон в одном файле, то не надо говорить компилятору какое воплощение будет.

 smile Ничего не понятно...
Может всё же сначала ознакомишься с вопросом, прежде чем пытаться что-то делать? Это будет гораздо быстрее, чем "медотом тыка".

Реализацию функций выносят в отдельный cpp файл отнюдь не ради красоты, а для РАЗДЕЛЬНОЙ КОМПИЛЯЦИИ. Насколько мне известно, к шаблонам это относиться в той же степени.

Это сообщение отредактировал(а) Леопольд - 29.7.2009, 10:16


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Brodyaga
Дата 29.7.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Может всё же сначала ознакомишься с вопросом, прежде чем пытаться что-то делать? Это будет гораздо быстрее, чем "медотом тыка".

Реализацию функций выносят в отдельный cpp файл отнюдь не ради красоты, а для РАЗДЕЛЬНОЙ КОМПИЛЯЦИИ. Насколько мне известно, к шаблонам это относиться в той же степени.

РАЗДЕЛЬНАЯ КОМПИЛЯЦИЯ ФОРЕВЕР! Все дружно начинаем молиться на неё!!!  smile 

Цитата

smile Ничего не понятно...

а я не понимаю к чему столько флуда про раздельную компиляцию и какие то непонятные вопросы мне о ней. Если чтото конкретно хочешь по моему примеру сказать, то скажи.

Цитата

Почему лучше разносить определение и реализацию в разные файлы? Что это дает и почему так рекомендуется?

Чтобы подключать определения определённых классов в местах где они нужны и чтобы вместе с ними не подключалась каждый раз вся реализация.
Или если изменится чтото только в реализации, то придётся перекомпилировать и слинковать только её. Ну вообщем.. раздельная компиляция (Леопольд! ВНИМАНИЕ! smile)))))))

Цитата

Не вижу ничего некрасивого.

Ну хорошо... а чем не нравится метод включения строк 
template ClassA* MyClass::MyFunc<ClassA>(ClassA* object);
template ClassB* MyClass::MyFunc<ClassB>(ClassB* object);

в файл myclass.cpp ?

Это сообщение отредактировал(а) Brodyaga - 29.7.2009, 14:56
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1044 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.