Программирование на "С/C++" и не только

(no subject)
upi
[info]othojee_mesto


//file: b.h

template <class T>
struct B
{
    T obj;
    void a()
    {
        obj.A::foo();
    }
};

//file: main.cpp

#include "b.h"

struct A
{
    void foo() {}
};

struct D: public A {};


B<D> x;

int main()
{
    x.a();
    return 0;
}




In member function ‘void B<T>::a()’:
error: ‘A’ has not been declared


A - один из родительских классов темплетного параметра T
идея понятна, но хотелось бы комментарии, желательно со ссылкой на стандарт

(UPDATE) как сделать я знаю - предварительно объявить класс A:

class A;

но возможно есть более прямой вариант в соответствии со стандартом
если нет, то тоже желательна ссылка на стандарт - по каким пунктам исходный вариант не канает

(UPDATE) RESOLVED:

obj.T::A::foo();

Конкурс от HP на Хабрахабре
[info]v_monten
Конкурс от HP на Хабрахабре. За лучший рассказ о рабочем месте своей мечты можно выиграть призы от HP.
http://habrahabr.ru/special/hpcarepacks/

Проблема с древним кодов в Cygwin/GCC 3.x/4.x (ISO C++ forbids cast to non-reference ... lvalue)
[info]kisa_i_osya
Может быть кто-то встречался или вещь настолько очевидная, что нагуглить невозможно... Есть древний код, где имеются такого рода функции:

void my_free(void *mem) {
    if (mem == NULL) return;

    ((byte*)mem) -= 4;
    alloced_space -= *(lword*)mem;

    if (trace_mem_alloc)
        printf("\nfree(#%08lX#) total=%ld", (lword)mem, alloced_space);
   
    mem -= 4;
    if (strcmp((char*)mem, "FJF"))
    {    fprintf(stderr, " FATAL ERROR: illegale free for #%08lX#.\n", (lword)mem);
        {    int i = 0; i = 1/i; }
    }
    //free(mem);
}

Собственно, своя реализация управления памятью. Зачем автор это делал -- бог весть. Как оно у него скомпилировалось -- тоже неясно. В доках сказано, что 12 лет назад такое компилировал Cygwin GCC 2.95.2, но сегодня ни 4.x, ни 3.x, ни то, что удается найти  в древних пакетах под видом GCC 2.95.2, переваривать это не желает, выдавая ошибку ISO C++ forbids cast to non-reference type used as lvalue.

Я понимаю, что GCC правильно делает, а код кривой в смысле следования стандартам. Но и перелопачивать это окаменевшее много лет назад нечто тоже очень не хочется. Соответственно, вопрос: можно ли как-то заставить GCC игнорировать такого рода штуки? Или, как вариант, изменить "малой кровью" конструкции типа ((byte*)mem) -= 4; на что-то равносильное по смыслу, но более корректное в плане следования стандарту? (Софтина компилируется, в общем-то, на один раз, это парсер некоего гнусного формата -- QXP, если кому интересно -- для разгребания архива файлов в нем).

В GCC (да и C++) не знаток, документацию читал, гуглил, версии разные пробовал, но увы.
  • 10
  • Leave a comment
  • Add to Memories

come back to cpp
Фрейд
[info]_maxxx_
 Добрый день, уважаемые!

Небольшая предыстория:
В год, когда я начал проявлять интерес к программированию как к профессии (2002) как раз появился .NET Framework. И я попал под волну майкросовтовской пропоганды, что все мы скоро станем "managed", что c++ будет забыт как страшный сон и все программисты на c++  вскоре встанут в очередь на C# вакансии...  И не оказалось в то время в моём окружении человека, который бы мне сказал что я что-то упускаю. Да и сам я не совсем понимал какие именно место в обширном мире разработки ПО мне интересно.
Вобщем время прошло, я начал работать, оказалось что на C# в серьёзных конторах пишущих очередную  ERP систему в Москве пишут исключительно frontend`ы, а серваки пишут на другой managed платформе - Java. Это конечно меня немного смутило, но в внушённую мне концепцию всепоглащающего managed`та вполне подходило. 
 
Короче осознал я что на C#/Java пишутся совсем не те проекты, о которых я мечтал становясь программистом. Они очень далеки от истинно "математического" программирования, скорость работы алгоритмов никого не интересует, про линейную алгебру алгебру никто не слыхивал и т.д. А пересаживаться уже вроде как было поздновато. 
 
Собственно вопрос: Не хочу я быть больше столбовою дворянкой... Хочу стать ядрёным C++ программером, но пока я размышлял и осознавал зарплата доросла уже до вполне обычных для этого рынка московских высот. А всякие на позициях junior/стажёров C++  обещают суммы как минимум вдвое меньше. Может подскажите мне путь, как можно с не очень большим проседанием в зарплате перейти в зону c++? Можно ли как то не очевидным образом использовать для этого опыт .NET/Java разработки?
 

Нужен .Net разработчик, Москва, 100k+бонусы+обучение
[info]rakne
Дорогой [info]lyanamiller , пожалуйста, спасите голову умнице-красавице, пропустите пост!
Спасибо!=))

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

Глобальная задача: разработка функциональности внутренней АБС банка и ее интеграция с ИС. Поскольку АБС специфическая, 1 сентября банк отправляет команду разработчиков в Чехию на обучение.
Вывод: вакансия срочная!

На что обращаем внимание: чтобы в опыте была .NET разработка хотя бы 2х серьезных (высоконагруженных то бишь) и законченных web-систем

Аббревиатуры: .NET 2.0-3.5, (C#, ASP.NET, ADO.NET), SQL, Oracle.

Английский язык: на уровне понимания речи англоязычного технаря, который 2 недели будет рассказывать об этой специфической АБС=)

Самое интересное:
ДМС + фитнес + скидки в турагентствах + льготное кредитование + отлично оборудованная кухня и вкусная столовая.

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

Денег даем 100 000 руб. после вычета налогов + квартальный бонус (около 50k) + годовой бонус (а это сюрприз:)

Лояльная и демократичная, но все-таки банковская структура, вся строгость которой исчерпывается графиком с 9.30 до 18.15 (для иллюстрации лояльности – летом в пятницу работают до 15.00).
За ношением галстука и пиджака никто не следит!

Территориально: ст.м. Белорусская.

Важно: Решение принимают быстро, максимум 2 встречи сразу с технарями + СБ. 

За успешную рекомендацию .NET Разработчика - 500$, а за четырех получится 2000$ =)

Ответы на все вопросы:

Аня / Анна / Анюта 

+7 (916) 835 92 94
почта alitvina@spice-agency.ru 
Skype: anna-litvina

ICQ: 611003029
anna-hr@jabber.ru (но Вы же понимаете что это не почта!=)
 

  • Leave a comment
  • Add to Memories

возможно, ламерский вопрос про запуск gnash в "своем" окне
[info]aureliano_b
Друзья, вот какой у меня к вам вопрос. Есть задача, запустить AS приложение (swf) в standalone режиме с gnash в fullscreen (а в конечном итоге, реализовать использование внешних функций). Я, соответсвенно, решил сделать небольшую "обертку" на Си. Рассудил я следующим образом:
- gnash имеет опцию "-x ID" где ID -- собсвтенно номер окна.
- в си есть exec, которым я запущу gnash как отдельную ветку и укажу номер окна.

поскольку я ранее не имел дело с оконными интерфейсами (в т/ч KDE), я нашел документацию и решил попробовать

------------------
int main( int argc, char *argv[] ){

int pid;
GtkWidget *window;

// if( !(pid = fork())){
// sleep(2);
// argv[0]="ls"; argv[1]="test.swf"; argv[2]="-x"; argv[3]="0"; argv[4]=NULL;
// execv("/usr/bin/gnash", argv);
// }

gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (destroy), NULL);
Window xwin = GDK_WINDOW_XWINDOW (window);
gtk_widget_show (window);
printf("xwin: %d\n", xwin);
argv[0]="ls"; argv[1]="test.swf"; argv[2]="-x"; argv[3]=(char *)xwin; argv[4]="-j"; argv[5]="100"; argv[6]="-k"; argv[7]="100"; argv[8]=NULL;
execv("/usr/bin/gnash", argv);
gtk_main();

return 0;
};
------------------

в общем, и окно открывается и gnash запускается, и в fork режиме и вместо текущего процесса, но вот в окно! в окно у меня никак не получается вставить вывод gnash. буду признателен, если более сведующие и компетентные товарищи подскажут что-нибудь дельное.

заранее признателен всем откликнувшимся.
  • 6
  • Leave a comment
  • Add to Memories

GNU file system
Raoul Duke
[info]bitomaxsp
народ нужен хелп на тему опен сорсной файловой системы. Важно, чтобы она не была привязана (в идела конечно) к конкретной операционке. JFS смотрел. А что есть ещё?

спасибо

pthread_join + timeout
I&#39;am, photo, irfan view
[info]analizer
Собственно сабж :)

Имеется серверное приложение с кучей потоков (ну или не совсем кучей, порядка десятка).
Потоки долгоживущие, по идее - недели и месяцы (дольше оно не протянет из-за багов иного порядка :) )
Хочется при получение shutdown message главным потоком - убивать порождённые потоки сначала отслыкой сообщения в их очередь (мол "давай доделывай работу и закрывай соединения"), а затем, если добровольная смерть была отвергнута, убивать pthread_kill.
Заковырка остается только в том что после отсылки сообщения в очередь, хочется ждать либо до того момента как поток сделает pthread_exit, либо, по истечении одной секунды, убивать его принудительно.
Ждать завершения потока можно по pthread_join, но он не умеет делать таймаут. (В винде это умеет делать WaitForSingleObject)

Знатоки, подскажите, пожалуйста, какая из апишек может ждать завершения потока, но не более некоторого таймаута?



Кросспост в ru_programming, ru_linux

а посоветуйте плиз проргамку с bsd-like лицензией на исходники
bw
[info]grey_olli
Нужно что нибудь на C/C++/C# посмотреть отображающего картинку на КПК. Исходник должен быть с bsd или bsd-подобной лицензией. Какие кстати ключи к гуглю предъявлять чтобы найти что-то вроде перлового CPAN?
  • 3
  • Leave a comment
  • Add to Memories

Совет почтенной публики.
small
[info]zigel

Уважаемые участники сообщества, прошу вашего совета.

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

Read more... )
Будет кросс-пост в ru_programming, как только получу членство в нем.


You are viewing the community [info]ru_cpp