?

Log in

Apr. 10th, 2007

jetsnail

Конечный автомат

Конечный автомат и его генерация средствами Си++ компилятора на основе шаблонов, без полиморфизма. Рекомендую всем.

P.S.: Статья дает краткое описание идеи реализации конечного автомата на шаблонах. Есть простой пример на Си++, на основе которого, приложившись, можно сделать довольно сложную и в то же время очень удобную машину состояний.

Apr. 6th, 2007

jetsnail

Сведи компилятор с ума!

Сегодня вечером нечего было делать, вот я и решил свести свой компилятор с ума. Я думаю, что каждый из вас работал со списками типов, но никто не делал вот так:

struct A {
};

template<typename TList>
struct MultipleInheritance :
  public TList::Head,
  public MultipleInheritance<typename TList::Tail>
{
};

template <typename T1>
struct RecTList {
  typedef T1 Head;
  typedef RecTList< RecTList<T1> > Tail;
};

typedef RecTList<A> ARecTList;

class RectClass : public MultipleInheritance<ARecTList> {};

int main() {
  return 0;
}

gcc долго-долго думает, потом корректно обрабатывает эту ситуацию, если NN значение параметра -ftemplate-depth-NN не слишком большое, но если, к примеру, его увеличить, то получим  нехватку памяти (памяти у меня много, так что ждать я не стал, кому интересно - попробуйте свалить gcc в core, поделитесь результатами).

А вот Microsoft Visual Studio 2005 SP1 просто сходит с ума:

1>------ Build started: Project: crec, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>x:\temp\crec\main.cpp(6) : fatal error C1001: An internal error has occurred in the compiler.
1>(compiler file 'msc1.cpp', line 1393)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
1>Please choose the Technical Support command on the Visual C++
1> Help menu, or open the Technical Support help file for more information
1>        x:\temp\crec\main.cpp(9) : see reference to class template instantiation 'MultipleInheritance<TList>' being compiled
1>        x:\temp\crec\main.cpp(9) : see reference to class template instantiation 'MultipleInheritance<RecTList<T1>>' being compiled
1>Build log was saved at "file://x:\Temp\crec\Debug\BuildLog.htm"
1>crec - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Будьте осторожнее.

Apr. 13th, 2006

jetsnail

Как подружиться с шаблонными параметрами


Мэтью Уилсон (Matthew Wilson) в своей статье “Дружественные Шаблоны” (Friendly Templates) которую вы можете найти в оригинале по адресу http://www.cuj.com/documents/s=8943/cujexp0312wilson2/ рассказал о том, как использовать шаблонные параметры в объявлении друзей классов. Его статья послужила толчком для некоторых интересных C++ решений. Ниже представлен перевод статьи Мэтью (немного лишней информации я убрал, однако важная информация от начала и до конца представлена в полном объеме) и мои исправления/дополнения.



Apr. 12th, 2006

jetsnail

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

Добрый день, уважаемые друзья. Рад приветствовать Вас в сообществе C++ разработчиков. Это сообщество создано для тех, кто заинтересован в интересных и качественных решениях проблем с помощью языка C++.

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

Я искренне надеюсь на Вашу помощь. Приглашаю к сотрудничеству заинтересованных профессионалов своего дела. Если у Вас есть знания и опыт, которыми Вы хотите поделиться с миром, помочь новичкам и, быть может, усовершенствовать свои решения с помощью профессиональной и объективной критики – добро пожаловать. Как известно, начинать всегда очень сложно, я попытаюсь сделать все от меня зависящее, чтобы качество информации было на высоте, чем собственно и хочу привлечь внимание профессионалов и интересующихся. Уверен, что этот журна C++ программистов будет полезен сообществу. Так же я буду переводить статьи с английского языка. Я понимаю, что английский язык очень важен и маловероятно то, что профессиональный разработчик его не знает, но все же родной язык воспринимается человеком легче и быстрее.

Если у Вас есть какие-то вопросы, замечания или предложения – пишите мне, с удовольствием отвечу каждому.

С уважением,
    Владислав Лазаренко.