<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1189122</guid>
        <pubDate>Mon, 24 Jul 2006 04:31:55 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1189122</link>
        <description><![CDATA[p_kolya: Ой... а чем для контроллера Си не устаривает? ИМХО для таких целей Си куда более пригоден, чем Си++.]]></description>
        <author>p_kolya</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1187938</guid>
        <pubDate>Sat, 22 Jul 2006 11:34:31 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1187938</link>
        <description><![CDATA[//nikson: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>под какой контроллер?</div></div><br>
<br>
msp430f149. на борту 60кб - пока ещё место есть :)]]></description>
        <author>//nikson</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1187833</guid>
        <pubDate>Sat, 22 Jul 2006 08:55:08 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1187833</link>
        <description><![CDATA[ElcnU: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>//nikson, 19.07.2006, 2:37:59, 1182897</span><div class='quote '>ЗЫ. компилятор используется IAR 3.21, но стандарты языка везде одинаковы...</div></div><br>
под какой контроллер?<br>
при описание класса IAR сожрал много памяти (работали с ATMeag8) :yes:]]></description>
        <author>ElcnU</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1184037</guid>
        <pubDate>Wed, 19 Jul 2006 15:08:34 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1184037</link>
        <description><![CDATA[Unreal Man: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=148775&view=findpost&p=1183622'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>//nikson &#064; <time class="tag-quote__quoted-time" datetime="2006-07-19T12:30:58+00:00">19.07.06, 12:30</time></span><div class='quote '>В принципе, можно попробовать сделать статическую функцию, но как это повлияет на работу - надо будет ещё подумать.</div></div><br>
Дык всё зависит от того, что ты хочешь сделать. Если твоя функция class_b::f работает с данными уже существующего объекта типа class_b, то тогда её не надо делать статической. Если же тебе нужен просто аналог глобальной функции с правом доступа к закрытым членам объектов типа class_b, используемых где-то внутри этой функции, либо ты просто хочешь выразить принадлежность этой функции к данном классу (хотя по сути её можно было бы сделать глобальной), то тогда следует использовать статическую функцию. Наконец, может ты вообще захотел сгруппировать глобальные функции в некую именованную совокупность, но тогда для этого лучше подходит пространство имён, а не класс.<br>
<br>
P.S. С бустом с таким знанием языка работать не советую :-&#8206;)]]></description>
        <author>Unreal Man</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183992</guid>
        <pubDate>Wed, 19 Jul 2006 14:40:30 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183992</link>
        <description><![CDATA[trainer: Там(в function) исключения вроде используются, а в них - std::string.]]></description>
        <author>trainer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183676</guid>
        <pubDate>Wed, 19 Jul 2006 12:53:12 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183676</link>
        <description><![CDATA[Flex Ferrum: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=148775&view=findpost&p=1183645'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>trainer &#064; <time class="tag-quote__quoted-time" datetime="2006-07-19T12:40:40+00:00">19.07.06, 12:40</time></span><div class='quote '>boost в мелкоконтроллере - довольно смело.</div></div><br>
Я думаю, от компилятора зависит. bind/function разворачиваются оптимизатором очень даже неплохо.]]></description>
        <author>Flex Ferrum</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183645</guid>
        <pubDate>Wed, 19 Jul 2006 12:40:40 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183645</link>
        <description><![CDATA[trainer: boost в мелкоконтроллере - довольно смело. :)]]></description>
        <author>trainer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183622</guid>
        <pubDate>Wed, 19 Jul 2006 12:30:58 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183622</link>
        <description><![CDATA[//nikson: Большое спасибо всем ответившим&#33;<br>
<br>
Несколько комментариев, зачем такое понадобилось. Программа предназначена для микроконтроллера, у прибора будет ЖКИ, и необходимо обеспечить графический интерфейс с пользователем. Для этого решил сделать набор простеньких классов а-ля Билдер - кнопочки, надписи итд. Получается, в программе есть *чисто программные* блоки (те самые графические элементы), а есть аппаратно-зависимые (работа с памятью, клавиатурой итд итп). Логично было бы их разделить. В самом деле, например, классу _надпись_ при отрисовке совершенно не надо знать, откуда и каким образом берётся массив байт с изображением (в разных устройствах может же быть по-разному) - ему просто подавай функцию, которая на заданный символ вернёт указатель на буфер (а сама реализует связь с памятью, обмен данными итд). Вот такую функцию я сделал в классе _микросхема_памяти_, образно говоря. При попытке подсунуть её классу _надпись_ и возник вопрос :)<br>
<br>
Поэтому наиболее подходящий вариант от <strong class='tag-b'>Flex Ferrum</strong> с использованием boost:: - почитал доки - вроде бы в самый раз будет. Если удастся это использовать и код особо не увеличится в размерах - будет просто супер&#33;<br>
<br>
В принципе, можно попробовать сделать статическую функцию, но как это повлияет на работу - надо будет ещё подумать.<br>
<br>
Ну, а использовать внутри класса с указателем хоть какое-нибудь упоминание о другом классе (напр, в типе указателя) не хотелось бы - нарушается принцип независмости, из-за которого всё это и было затеяно.<br>
<br>
ЗЫ. тему не закрываю, а вдруг с boost сам не разберусь, тогда ещё поспрашиваю :)]]></description>
        <author>//nikson</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183086</guid>
        <pubDate>Wed, 19 Jul 2006 07:18:14 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183086</link>
        <description><![CDATA[BlackEmperor: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//--------------------</div><div class="code_line">class class_b</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;char f(char);</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">//-------------------</div><div class="code_line">char class_b::f(char)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return &#39;!&#39;;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class class_a</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp;char (class_b::*fptr)(char);</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">//-------------------</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;class_a a;</div><div class="code_line">&nbsp;&nbsp;class_b b;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;a.fptr = &amp;class_b::f;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;(b.*a.fptr)(&#39;a&#39;);</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>BlackEmperor</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183077</guid>
        <pubDate>Wed, 19 Jul 2006 07:11:48 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183077</link>
        <description><![CDATA[Sazabis: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class MyClass{</div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef long ( MyClass::* FPTR )( int );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;long func( int a ){ return ++a; }</div><div class="code_line">&nbsp;&nbsp; &nbsp;long func( int a, char b ){ return a += b; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void anyfunc( FPTR function, int a ){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;a = (this-&#62;*function)( a );</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void runfunc(){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;anyfunc( &amp;MyClass::func, 5 );</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div>]]></description>
        <author>Sazabis</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183075</guid>
        <pubDate>Wed, 19 Jul 2006 07:08:50 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1183075</link>
        <description><![CDATA[Flex Ferrum: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=148775&view=findpost&p=1182897'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>//nikson &#064; <time class="tag-quote__quoted-time" datetime="2006-07-18T23:37:59+00:00">18.07.06, 23:37</time></span><div class='quote '>вот f2, функция &quot;сама по себе&quot;, нормально присваивается. а на закомментированные строчки<br>
компилятор ругается. как правильно надо? Просьба гнилыми помидорами не забрасывать</div></div><br>
Все дело в том, что указатель на функцию-член - далеко не тоже самое, что указатель на свободную функцию. Вот компилятор и ругается. Я бы предложил сделать так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//--------------------</div><div class="code_line">class class_a</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;boost::function&#60;char (char)&#62; fptr;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">//--------------------</div><div class="code_line">class class_b</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;char f(char);</div><div class="code_line">};</div><div class="code_line">//...</div><div class="code_line">//...</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;class_a a;</div><div class="code_line">&nbsp;&nbsp;class_b b;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;a.fptr = boost::bind(&amp;b::f, &amp;b, _1);</div><div class="code_line">&nbsp;&nbsp;a.fptr(&#39;A&#39;);</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Flex Ferrum</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1182906</guid>
        <pubDate>Wed, 19 Jul 2006 01:00:14 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1182906</link>
        <description><![CDATA[Unreal Man: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=148775&view=findpost&p=1182897'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>//nikson &#064; <time class="tag-quote__quoted-time" datetime="2006-07-18T23:37:59+00:00">18.07.06, 23:37</time></span><div class='quote '>//  a.fptr = b.f;       // Error</div></div><br>
Или делай свою функцию в class_b статической, или используй тип (class_b::*)(char) в качестве указателя на функцию.]]></description>
        <author>Unreal Man</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1182902</guid>
        <pubDate>Wed, 19 Jul 2006 00:04:05 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1182902</link>
        <description><![CDATA[Russel: Предположение - сделать метод в классе B, который будет возвращать указатель на функцию class_b::f, и вызывать этот метод из класса class_a?]]></description>
        <author>Russel</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1182897</guid>
        <pubDate>Tue, 18 Jul 2006 23:37:59 +0000</pubDate>
        <title>указатель на функцию-элемент класса...</title>
        <link>https://forum.sources.ru/index.php?showtopic=148775&amp;view=findpost&amp;p=1182897</link>
        <description><![CDATA[//nikson: Подскажите, пожалуйста, как разобраться с проблемкой в программе:<br>
Решил попробовать использовать классы С++ и наткнулся вот на какую ситуацию.<br>
у меня есть два класса. в одном описан элемент-функция. во втором - элемент-указатель на функцию.<br>
Хочется присвоить указателю адрес этой функции-элемента, а не получается. Вот если указателю <br>
подсунуть &quot;просто функцию&quot;, вне класса - всё нормально. <br>
Для иллюстрации набросал вот такой примерчик:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//--------------------</div><div class="code_line">class class_a</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;char (*fptr)(char);</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">//--------------------</div><div class="code_line">class class_b</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;char f(char);</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">//-------------------</div><div class="code_line">char class_b::f(char)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return &#39;!&#39;;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">//-------------------</div><div class="code_line">char f2(char)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return &#39;~&#39;;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">//-------------------</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;class_a a;</div><div class="code_line">&nbsp;&nbsp;class_b b;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;a.fptr = f2;</div><div class="code_line">// &nbsp;a.fptr = b.f; &nbsp; &nbsp; &nbsp; // Error[Pe300]: a pointer to a bound function may only be used to call the</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//function </div><div class="code_line">// &nbsp;a.fptr = class_b::f;// Error[Pe513]: a value of type &quot;char (__code class_b::*)(char)&quot; cannot be</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//assigned to an entity of type &quot;char (*)(char)&quot;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
вот f2, функция &quot;сама по себе&quot;, нормально присваивается. а на закомментированные строчки <br>
компилятор ругается. как правильно надо? Просьба гнилыми помидорами не забрасывать :).<br>
<br>
ЗЫ. компилятор используется IAR 3.21, но стандарты языка везде одинаковы...]]></description>
        <author>//nikson</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	