- Maintenant de la mathematique de la philosophie politique.. - 3 Updates
- cmsg cancel <nvlcjg$n7m$1@dont-email.me> - 2 Updates
- Template Library files and Header linking troubles - 4 Updates
- +1 - 5 Updates
- std::exception move, copy, swap - 7 Updates
- templates within templates - 4 Updates
Ramine <ramine@1.1>: Nov 05 03:41PM -0400 Salut, Maintenant de la mathematique de la philosophie politique.. Il y'en a qui vont affirmer naivement , que la politique ce n'est pas de la mathematique, moi je vais les contredire et leur dire que la politique c'est aussi de la mathematique, alors je commence ma demonstration mathematique avec la ruse de la logique comme suit: Prenons par exemple l'essence de Loi.. Mais comme donc inferer la Loi à votre avis ? Par la ruse de la logique bien entendu.. Je vous donne un exemple: La Loi est inferée aussi par la Loi du pouvoir et du contre pouvoir. C'est comme la Loi de l'offre et la demande en economie.. Alors prenons ma demonstration logique sur la discrimination sur les immigrants engendrée par l'egoisme engendré par la tristesse, puisque le peuple n`est pas vraiment joyeux et cela c`est les données empiriques qui nous le disent. Alors prenons par exemple la France, nous devons inferer la Loi de la Loi du pouvoir et du contre pouvoir, puisque l`Afrique et le monde Arabe sont des consommateurs aussi et ils font des affaires avec le monde occidental , alors la Loi du pouvoir et du contre pouvoir exige de nous de ne pas negliger le pouvoir de l`Afrique et du monde arabe, puisque ce sont des consommateurs qui consomment des produits par exemple du secteur secondaire de la France et ils consomment bien d`autres produits et services et ils font aussi des affaires avec la France, alors de cela nous pouvons inferer par la Loi du pouvoir et contre pouvoir que les immigrés magrebins et africains meritent un traitement plus convenable avec une morale plus convenable à la Loi du pouvoir et contre pouvoir qui nous dit que cela est une chose importante car l`image de la France est importante dans les relations entre la France ou l`Europe d`un coté et l`Afrique et le monde Arabe de l`autre. Cela est ma première demonstration par la ruse de la logique de comment inferer la Loi au niveau de l`essence de la Loi. Ma deuxième demonstration par la ruse de la logique sur ce sujet, de commment inferer la Loi au niveau de l`essence de la Loi c`est ceci: Puisque la compassion et le respect qui sont des variables participant à l`optimisation du système politique et qui engendrent la qualité du social et de la securité, alors ces variables sont importantes aussi et on ne peut les negliger et donnwe plutot que la priorité à la variable de force, donc de la performance, comme le faisait le nazisme, car pour un logicien et un sage comme moi, les variables de la compassion et du respect améne aussi de la qualité , puisque le principe qui nous dit que le fait de ne pas souffrir est une chose d`une extreme importance et qui merite notre respect, donc cela vient mettre une plus grande priorité sur les variables de compassion et de respect, donc pour un logicien comme moi, puisque ces variables sont aussi très importantes dans le modèle politique, alors le fait de les negliger en faveur de la performance est un extremisme non acceptable par la logique mathematique, donc le fait de dire il n`y a que la performance ou de donner à la performance trop d`importance par rapport à la compassion comme le faisait le nazisme est une chose non acceptable par la logique mathematique. Et c`est cela aussi la mathematique. Revenons maintenant à la Loi de l`offre de la demande en economie.. J`ai dit que la conception qui est de dire que la domination economique des pays du Nord sur les pays du Sud dans le secteur secondaire n`est plus considèré comme dans le passé non acceptable, puisque le modernisme nous dicte qu`elle est devenu plus acceptable, voici la demonstration avec la ruse de la logique qui le prouve: Maintenant ma philosophie sur la politique.. Moi je suis comme les philosophes logiciens comme Hegel et Kant, et chez moi c`est la logique appliquée qui prime aussi, et la ruse en logique chez moi est nécessaire comme je viens de l`expliquer, et chez moi la politique c`est comme jouer aux echecs, alors comment croyez-vous que je vais aborder la question de ma philosophie sur la politique? mais qu`est-ce que donc philosopher sur la politique comme le faisait Kant et Hegel? alors la methode qui consiste à ruser avec de la logique pour simplifier au maximum la compléxité est aussi ma methode preférée, alors je ne vais pas y aller par mille chemins et je vais philosopher comme suit sur la politique: Comme je vous ai dit precedement il faudrait par la ruse simplifier le modèle , et cela a debouché avec mon raisonnement logique à le simplifier en trois variables que sont: La compassion et le respect et la performance, et j`ai dit que logiquement que à priori en logique: Les variables de compassion et de respect engendrent la qualité du social et la qualité de la securité, et la variable de performance engendre de la performance, alors tout commence à s`eclaicir avec ma ruse en logique, car les nationalistes maintenant interpretent la securité qui est causée par les variables de compassion et de respect, comme faisant defaut, alors vous allait voir la famille Le Pen, comme Marine Le Pen et Le Pére Le Pen dire par exemple que: "L`Afrique aux africains", mais cela est une conception archaïque, car les nationalistes ne comprennent pas que le Liberalisme qui contient en lui même les principes d`une morale convenable, et que j`ai demontré logiquement, nous dit que la domination jusqu`a un certain niveau est une affaire normale en economie, mais le modèle Liberal nous suggère de jouer aux echecs comme des renards et profiter de la benediction qu`est le Liberalisme, mais comme je l`ai expliqué dans mon poste precedant, quand je dis: Cardinal de fr.soc.politique tu es vraiment intelligent. Cela sonne bien, mais c`est cela la base de l`economie, c`est aussi le message qui te donne de l`image, et la base de l`economie aussi c`est qu`il faut savoir perdre pour gagner, alors il faut par exemple savoir donner jusqu`a un certain point pour donner l`impression comme un renard que tu es bon aussi, pour pouvoir vendre dans les marchés des autres et gagner aprés cela. Et c`est cela l`economie , car le principe fondateur de l`economie Liberale, c`est que quand tu fais attention à ton image , donc tu fais attention aux indicateurs sociaux et economiques, et cela rend nécessaire une morale qui est convenable et plus jolie pour pouvoir gagner en economie. Mais quand je dis jouer aux echecs en economie, vous comprenez bien que: "Les modèles économiques élaborés par les économistes du développement des années 60, fondés sur l'idée des industries industrialisantes, semblent de plus en plus perdre de leurs adeptes inconditionnels. Le développement économique d'un pays ou d'une région n'est plus tributaire du développement du secteur secondaire soit l'industrie lourde." Lisez le tout ici dans le journal l'Economiste: http://www.leconomiste.com/article/915791-la-conqu-te-conomique-de-l-afrique-passe-par-le-secteur-des-servicespar-m-fadel-el-ha Alors vous comprenez bien que cela facilite la reussite du Liberalisme , donc la domination economique jusqu`à un certain point sur l`Afrique ou d`autres pays dans le seteur secondaire devient convenable, donc le message de "L`Afrique aux africains" n`est plus acceptable au sein du Liberalisme, et pourquoi croyez-vous que la famille Le Pen dit: "L`Afrique aux africains", c`est parceque elle voudrait que cette immigration des pays du Sud vers les pays du Nord cesse, ce message des Le Pen c`est du racisme deguisé, c`est ce que fait d`ailleurs monsieur Spartacus sur ce forum de fr.soc.politique, il encourage ce même message de Le Pen avec le même but de ces nationalistes, alors vous comprenez que moi je ne suis pas daccord avec ces nationalistes, Je vais rajouter un point essentiel à ma philosophie politique, et puisque je suis informaticien et je m`y connais en optimisation, alors j`en arrive à un point essentiel qui me met en desaccord avec Marine Lepen et le parties d`extreme droites qui lui ressemble, et ce point essentiel c`est celui du critère d`optimisation, ce que essaye de faire la politique de l`union européenne c`est d`optimiser l`Europe, comme on optimise en informatique, et cette optimisation revèle la faiblesse de l`extreme droite, car l`extreme droite nous dit que les français de souche et la blancheur de la peau prend de la precedance, mais l`Europe raisonne comme en optimisation en informatique, et la politique européenne nous dit que l`optimisation ce n`est pas donner la precedence à la couleur de peau blanche ou donner la precedence aux français de souche , mais c`est donner la precedence à l`optimisation de l'Europe en tenant compte des critères d`optimisation, c`est cela la faiblesse de l`extreme droite qui cache son jeux au peuple en pretextant qu`ils defendent les populations de souche à couleur de peau blanche. Alors je vous invite encore à lire sur ce que j`ai dit auparavant pour me comprendre mieux: Le Pen le père disait: "L`Afrique aux africains" Et je ne crois pas que Marine Le Pen est differente. Mais moi je crois que ce message de la famille Le Pen est vraiment bète. Car ce message en lui même contient intrinséquement en lui le fait que les africains doivent avoir recours au nationalisme extremiste qui utilise le protectionnisme d`une manière non convenable. Mais cela rentre en contradiction avec le principe fondateur convenable du Liberalisme qui nous dit que si tu veux attirer les investissements, alors tu dois ouvrir tes marchés plus convenablement, et ce principe ne rentre pas en contradiction avec la science, puisque si tu veux proteger ton secteur secondaire en ayant recours au protectionnisme , cela aura tendance aussi à abaisser la qualité des produits, donc cela demontre bien que au sein du Liberalisme, le message de: "L`Afrique aux africains", n`est pas accepté en tant que tel. Donc cela demontre que la famille Le Pen a une vue vraiment restreinte et bête de ce que devrait être l`Afrique. Je continu... Parlons economie à propos de mon texte ci-haut: Vous comprenez ce que je pense sur le message suivant: Le Pen le père disait: "L`Afrique aux africains" Alors comme je disais, ce message est bête , car l`Afrique n`appartient qu`aux africains, car cette conception archaïque est depassée, et voici ma demonstration logique avec des preuves: Lire premièrement ceci: "Les modèles économiques élaborés par les économistes du développement des années 60, fondés sur l'idée des industries industrialisantes, semblent de plus en plus perdre de leurs adeptes inconditionnels. Le développement économique d'un pays ou d'une région n'est plus tributaire du développement du secteur secondaire soit l'industrie lourde." Lisez le tout ici dans le journal l'Economiste: http://www.leconomiste.com/article/915791-la-conqu-te-conomique-de-l-afrique-passe-par-le-secteur-des-servicespar-m-fadel-el-ha Donc puisque le développement économique d'un pays ou d'une région n'est plus tributaire du développement du secteur secondaire soit l'industrie lourde, alors ce n`est pas necessaire pour l`Afrique à avoir recours au protectionnisme au niveau du secteur secondaire, donc l`Afrique aura tendance à acheter les produits du secteur secondaire et technologique qui lui viennent de l`exterieur de l`Afrique, mais ce modèle ne peut être appellé: "L`Afrique aux africains", car l`Afrique aura tendance à dependre dans son secteur secondaire et technologique des produits qui lui viennent de l`exterieur, sans pour autant avoir peur de cela, car comme je viens de le prouver ci-haut que: "Le développement économique d'un pays ou d'une région n'est plus tributaire du développement du secteur secondaire soit l'industrie lourde." Sur la qualité maintenant... Je commence par vous dire que la vente des produits à bas coût et de qualité mediocre des chinois ou d`autres ne va pas durer longtemps, car l`amelioration des indicateurs economiques de l`Afrique ou d`autres regions du même type se fait rapidement, car l`Afrique a compris que: "Les modèles économiques élaborés par les économistes du développement des années 60, fondés sur l'idée des industries industrialisantes, semblent de plus en plus perdre de leurs adeptes inconditionnels. Le développement économique d'un pays ou d'une région n'est plus tributaire du développement du secteur secondaire soit l'industrie lourde." Lisez le tout ici dans le journal l'Economiste: http://www.leconomiste.com/article/915791-la-conqu-te-conomique-de-l-afrique-passe-par-le-secteur-des-servicespar-m-fadel-el-ha Donc puisque les indicateurs economiques de l`Afrique s`ameliorent rapidement, alors le principe que je vous ai dit qui est le suivant sera vrai dans pas longtemps pour l`Afrique aussi, le revoici: Revenons si vous voulez bien sur la Loi de l`offre et la demande, cette Loi a quelque chose d`intrinséque c`est que l`offre est forcée par une probabilité superieure d`offrir une meilleur qualité par peur de la punition de la demande.. Alors notons bien que l`espace echantionnal en mathematique de probabilité est que les trois evenements suivants se realisent: le premier evenements est que la demande exige une qualité moyenne et que le deuxième evenement c`est que la demande exige une qualité superieure et que le troisième evenement c`est que la demande exige une qualité mediocre, alors à mon avis l`evenement qui l`emporte majoritairement c`est l`union des evenements suivants: l`Evenement de la demande qui exige une qualité superieure et l`evenement de la demande qui exige une qualité moyenne, mais cela ne s`arréte pas là, puisque l`offre raisonne d`une manière probabilistique puisque la demande a une tendance à exiger une qualité meilleur. Je vais maintenant vous expliquer la Loi de l`offre et de la demande dans le Liberalisme avec de la mathematique de probabilité en utilisant une probabilité conditionnelle interessante, mais pour revenir à la probabilité: La probabilité d`un evenement sur un espace echantilonnal c`est aussi une probabilité conditionelle: Car notons S l`espace echantilonnal. Et E un evenement qui engendre un sous-ensemble à l`interieur de cet espace echantionnal S. Alors on peut calculer P(E) = n(E)/n(S) mais aussi cela est une probabilité conditionnelle: car P(E) = P(E | S) = n(intersection_de(E,S))/n(S), et cela est egale à n(E)/n(S) Et pour l`offre donc, dans la Loi de l'offre et la demande, elle a à evaluer la probabilité conditionnelle de: P(reussir à vendre | l`evenement de la demande a tendance à exigée une meilleur qualité), et cette probabilité est superieure, car l'espace echantilonnal en mathematique de probabilité devient le: en sachant que l`evenement de la demande a tendance à exigée une meilleur qualité, qui est vraiment grand, donc la Loi de l`offre et de la demande a tendance a reguler la qualité vers une meilleur qualité. Maintenant je passe à l`essence de la qualité... Vous m`avez-vue vous parler de qualité qui créee le problème de la recherche du maximum global , comme chez le Liberalisme, et voici ma demonstration logique sur cela: Sur le problème de la recherche du maximum global qui se retrouve dans le Liberalisme et dans le nazisme etc. car les nazis voulaient optimiser mieux leur société en ayant même recours à de la violence et donnant de la priorité à la performance, comme dans le Liberalisme qui à tendance à donner de la priorité à la performance |
Ramine <ramine@1.1>: Nov 05 03:41PM -0400 Sorry, i have posted in the wrong group. |
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Nov 05 07:48PM On 05/11/2016 19:41, Ramine wrote: > Sorry, i have posted in the wrong group. You are a fucking liar; why don't you do us all a favour and turn your Usenet spambot off? /Flibble |
bleachbot <bleachbot@httrack.com>: Nov 05 08:41PM +0100 |
bleachbot <bleachbot@httrack.com>: Nov 05 08:41PM +0100 |
Popping mad <rainbow@colition.gov>: Nov 05 03:41PM I've been trying to create some custom system libraries with templating and it surprised me when I starting to get linking problems. Generally I create a .h file and a .cpp file and develop objects which can later be developed into shared libraries. Years ago I did quite a bit of work with C++ and libraries and I don't recall having this problem, but looking back at the code, I see I was cramming a lot of class definitions directly into the .h file. So I must have hit this snag before but I don't remember it. You'll have to excuse me if I sound a little vague on this problem I am having, but it is very complicated and I'm slow at getting my head around this issue. And it seems to affected somehow by name space. I'm looking over the text by Vandevoorde and Josuttis, "C++ Templates The complete guild, 12th printing in June of 2010 and copyrighted in 2003. They seem to sum up the problem fairly well, although there explanation is a bit cryptic to me. Section 6.1.1 and 6.1.2 on pages 63 after show some sample code of a 3 file break out of C++ code they write: A C++ compiler will most likely accept this program without any problems, but the linker will probably report an error, implying that there is no definition for the function print_typeof()... (adlib) for a common solution... We include the defintions of a template in the header file that declares that template.. For our example, we can do this by adding #include "myfirst.cpp" at the end of myfirst.cpp in every do-C file that uses the template. A third way, or course, is to do away with myfirst.cpp and rewrite myfirst.hpp so that it contains all template declarations and template definitions. Ugg. So I'm looking over old code that I wrote and it seems that namespace influences the result of this, at least with gcc on GNU. In this file here, I seem to be having no problem creating templated objects in a .cpp file, but everything is being dumped the std namespace http://www.nylxs.com/docs/workshops/linklist_templates/linklist.cpp.html 1 #include "linklist.h" 2 #include <iostream> 3 4 using namespace std; 5 6 template<class unk> 7 NODE<unk>::~NODE<unk>(){ 8 //cout << "List Item Destroyed" << endl; 9 10 } 11 12 13 14 15 template<class unk> 16 void LIST<unk>::remove_front(){ 17 if(_at_front == 0){ 18 cout << "No List" << endl; 19 return; 20 } 21 NODE<unk> * tmp = _at_front; 22 down_size(); 23 _at_front = tmp->next(); 24 if(tmp->next() == NULL) 25 _at_end = 0; //need to clear _at_end as well once you delete the last node 26 27 28 delete tmp; 29 return; 30 } 31 The code I'm working on currently is less fortunate. I created a namespace for it ~~nodes.cpp #include "nodes.h" #include <iostream> using namespace std; template<class unk> tree::NODE<unk>::NODE( unk states, NODE<unk> *cl, NODE<unk> *cr, NODE<unk> *p ){ cout << "Im here" << endl; } template<class unk> tree::NODE<unk>::~NODE<unk>(){ }; ~~~~ || g++ -Wall -ggdb -c nodes.cpp nodes.cpp|5 col 1| error: 'tree' does not name a type || tree::NODE<unk>::NODE( unk states, NODE<unk> *cl, NODE<unk> *cr, NODE<unk> *p ){ || ^~~~ nodes.cpp|10 col 1| error: 'tree' does not name a type || tree::NODE<unk>::~NODE<unk>(){ || ^~~~ make: *** [makefile|8| nodes.o] Error 1 before this, it was saying it couldn't find definitions of my templates in this file. I did a circular thing and included, as per what it said in the text, #include node.cpp in file node.h /* * ===================================================================================== * * Filename: nodes.h * * Description: description of phylogentic nodes as per * Fitch and Sannkoff as describd by Felenstein * * Version: 1.0 * Created: Nov 4 21:15:49 EDT 2016 * Revision: none * Compiler: gcc * * Author: Ruben Safir, * Company: LIU Thesis * * ===================================================================================== */ #ifndef NODES_H #define NODES_H #include<iostream> #include<string> #include<vector> #include "nodes.cpp" namespace tree { /* ============================================================================== * Class NODE - * Description - This is a node in the tree that must undergo parsimony evaluation * ================================================================================ */ Now the namespace issue is cropping up. |
"Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>: Nov 05 06:51PM +0100 On 05.11.2016 16:41, Popping mad wrote: > back at the code, I see I was cramming a lot of class definitions directly > into the .h file. So I must have hit this snag before but I don't > remember it. [snip] > Now the namespace issue is cropping up. You don't have a namespace-related problem, or if you have one it's unrelated. The problem is simply that in order to instantiate a template with given template arguments, the full textual definition must be available to the compiler. If you compile the template definitions separately, then you can only instantiate them in the translation unit where you define them (because here the textual definitions are available), and this means instantiating them for a fixed number of possible types. They can be used with these arguments in other TUs. But any other arguments, and the linker will complain of lacking instantiations. So usually templates are fully defined in headers. E.g. much of Boost are template based header-only sub-libraries. • • • C++98 and C++03 had an `export` feature to deal with separate compilation of template definitions. Unfortunately, as I recall it was only ever implemented by Comeau and (with an undocumented option to activate it) in the Intel compiler. `export` was removed in C++11. • • • Rumours have long been that this will be fixed again "when" C++ gets modules, and that's also rumoured to fix the extreme build times and much else. E.g. Microsoft dismissed my suggestion of how to improve build times because, hey, modules will fix all that. And Visual C++ does have experimental module support already, but I don't know whether it fixes build times, or deals with templates, or what. Cheers & hth., - Alf |
ruben safir <ruben@mrbrklyn.com>: Nov 05 02:49PM -0400 On 11/05/2016 01:51 PM, Alf P. Steinbach wrote: > translation unit what is that...exactly. |
Ben Bacarisse <ben.usenet@bsb.me.uk>: Nov 05 07:21PM > On 11/05/2016 01:51 PM, Alf P. Steinbach wrote: >> translation unit > what is that...exactly. "The text of the program is kept in units called source files in this International Standard. A source file together with all the headers (17.6.1.2) and source files included (16.2) via the preprocessing directive #include, less any source lines skipped by any of the conditional inclusion (16.1) preprocessing directives, is called a translation unit." -- Ben. |
"Rick C. Hodgin" <rick.c.hodgin@gmail.com>: Nov 04 08:09PM -0700 On Friday, November 4, 2016 at 6:28:29 PM UTC-4, Real Troll wrote: > > is almost as annoying as replying to a Usenet post with just: > > +0 > > Usenet isn't Stack Overflow so stop wasting bandwidth. Absolutely. And it's equally wasteful in terms of screen real-estate to, for example, double-space every single line of a post. > Did you get the permission from Rick Hodgin to post this? Why did you > not mention Jesus Christ in your post? -2. :-) Best regards, Rick C. Hodgin |
Gareth Owen <gwowen@gmail.com>: Nov 05 02:50PM > is almost as annoying as replying to a Usenet post with just: > +0 > Usenet isn't Stack Overflow so stop wasting bandwidth. +i |
bitrex <bitrex@de.lete.earthlink.net>: Nov 05 02:48PM -0400 On 11/04/2016 06:14 PM, Mr Flibble wrote: > +0 > Usenet isn't Stack Overflow so stop wasting bandwidth. > /Flibble Hi I like C++11 |
"Rick C. Hodgin" <rick.c.hodgin@gmail.com>: Nov 05 11:50AM -0700 On Saturday, November 5, 2016 at 2:49:05 PM UTC-4, bitrex wrote: > > +0 > > Usenet isn't Stack Overflow so stop wasting bandwidth. > Hi I like C++11 I like your answer, bitrex. It goes to eleven. Best regards, Rick C. Hodgin |
Dombo <dombo@disposable.invalid>: Nov 05 08:05PM +0100 Op 04-Nov-16 om 23:14 schreef Mr Flibble: > +0 > Usenet isn't Stack Overflow so stop wasting bandwidth. > /Flibble +1 |
"Christopher J. Pisz" <cpisz@austin.rr.com>: Nov 05 03:46AM -0500 I am reading about the "copy and swap idiom" online, which is new to me. I desire to derive from std::runtime error in order to make my own exception that also contains filename, line, and time it was created. I do not see a move constructor, or a swap for any of the std exceptions. Are there any? Do I just not worry about "the rule of 5" here and stick to the "rule of 3" that I do know? I am not sure how I would swap that what() from within a derived class. |
"Öö Tiib" <ootiib@hot.ee>: Nov 05 04:34AM -0700 On Saturday, 5 November 2016 10:46:28 UTC+2, Christopher J. Pisz wrote: > I am reading about the "copy and swap idiom" online, which is new to me. Whatever it is they write about they often praise it but forget to mention the important limitations. > I desire to derive from std::runtime error in order to make my own > exception that also contains filename, line, and time it was created. Note that "copy and swap" won't typically make sense on case of dynamically polymorphic object hierarchy like 'std::exception'. You will get objects sliced if you swap within such hierarchy using base classes. > I do not see a move constructor, or a swap for any of the std > exceptions. Are there any? No. Also compiler may not make those implicitly. > Do I just not worry about "the rule of 5" here and stick to the "rule of > 3" that I do know? > I am not sure how I would swap that what() from within a derived class. I am not sure why the copy constructor of 'std::exception' is not 'protected' and copy assignment '= delete'. Perhaps there was something about exceptions that I have forgotten. Why you copy exceptions? I just throw and catch const references to those. The usual rule about dynamically polymorphic stuff is that we use it through additional indirection. When we need to swap or to assign such then we swap or assign owning pointers or smart pointers and we do not assign nor copy nor swap the object itself. When we really need to dynamically create polymorphic copy of actual objects (rare case) then we add virtual 'clone' function to the whole hierarchy. |
Paavo Helde <myfirstname@osa.pri.ee>: Nov 05 03:32PM +0200 On 5.11.2016 10:46, Christopher J. Pisz wrote: > exception that also contains filename, line, and time it was created. > I do not see a move constructor, or a swap for any of the std > exceptions. Are there any? Copying exceptions is in general complicated because one typically does not know the dynamic type of the exception and there is no base class nor a virtual clone function in the base class. Fortunately, there is actually no need to copy exceptions as the exception objects are logically immutable. Instead one can create smartpointers to the exception object which can be freely copied, sent over to other thread, etc: try { // ... } catch(...) { std::exception_ptr p1 = std::current_exception(); std::exception_ptr p2 = p1; // ... } hth Paavo |
jon@cppcon.org: Nov 05 10:38AM -0700 On Saturday, November 5, 2016 at 4:34:49 AM UTC-7, Öö Tiib wrote: > 'protected' and copy assignment '= delete'. Perhaps there was > something about exceptions that I have forgotten. Why you copy > exceptions? I just throw and catch const references to those. Catching by reference is the correct thing to do, but the standard requires that exceptions be copyable. The expression "throw Foo{};" implies a copy (although compilers are free to elide this copy). |
jon@cppcon.org: Nov 05 10:40AM -0700 On Saturday, November 5, 2016 at 6:32:49 AM UTC-7, Paavo Helde wrote: > nor a virtual clone function in the base class. > Fortunately, there is actually no need to copy exceptions as the > exception objects are logically immutable. Exception objects are not necessarily immutable. See boost::exception for an important use case involving modifying exceptions. |
"Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>: Nov 05 07:08PM +0100 On 05.11.2016 09:46, Christopher J. Pisz wrote: > exception that also contains filename, line, and time it was created. > I do not see a move constructor, or a swap for any of the std > exceptions. Are there any? Nope. A standard library exception class is guaranteed copyable, but not movable. When you add state to a non-swappable class you can design that state as an object with its own copy assignment operator, that uses the copy and swap idiom. Then for the exception object that this state is part of, just let the compiler create a default copy assignment operator. > Do I just not worry about "the rule of 5" here and stick to the "rule of > 3" that I do know? You don't have to provide move semantics for your extra state, because it will not be moved. > I am not sure how I would swap that what() from within a derived class. Not sure what you mean here, sorry. Cheers & hth., - Alf |
"Öö Tiib" <ootiib@hot.ee>: Nov 05 11:33AM -0700 > Catching by reference is the correct thing to do, but the standard > requires that exceptions be copyable. The expression "throw Foo{};" > implies a copy (although compilers are free to elide this copy). That expression is likely eliding copying most derived type Foo to object of same type. So that seemingly does not illustrate at all how and what OP is there planning to "copy and swap". |
Popping mad <rainbow@colition.gov>: Nov 05 06:15AM I have a class that is a template class template<class cost> class state { public: /* ==================== LIFECYCLE ======================================= */ /* constructor */ explicit inline state<cost>(std::string const a, cost r)//r is the current minimal state for a node :_nam{a}, _r{r} {}; /* ==================== ACCESSORS ======================================= */ inline std::string nam(){return _nam;}; inline cost r(){return _r;}; //once it is set it is set //inline void nam(std::string a ){_nam = a;} inline void r(cost b ){_r = b;} /* ==================== MUTATORS ======================================= */ /* ==================== OPERATORS ======================================= */ /* ==================== DATA MEMBERS ======================================= */ protected: private: std::string _nam; cost _r; }; /* ----- end of class State ----- */ I want to use it for a vector type in another class. In order to do this, I seem to have to make the second class also a template, which doesn't seem right. But I have to knwo the unknow template type prior to constructing the vectors /* * ===================================================================================== * Class: Pstates * Description: vector of all possible states * ===================================================================================== */ template<class cost> class Pstates { public: /* ==================== LIFECYCLE ======================================= */ inline explicit Pstates (std::vector< state<cost> > x) :_vstate{x}{}; /* constructor */ inline ~Pstates (){delete _vstate; }; /* destructor */ /* ==================== ACCESSORS ======================================= */ /* ==================== MUTATORS ======================================= */ /* ==================== OPERATORS ======================================= */ const Pstates& operator = ( const Pstates &other ); /* assignment operator */ /* ==================== DATA MEMBERS ======================================= */ protected: private: std::vector<state <cost> > _vstate; }; /* ----- end of class Pstates ----- */ Am I doing this wrong? And do I need to use Pstates<cost> in the constructor? |
Paavo Helde <myfirstname@osa.pri.ee>: Nov 05 10:34AM +0200 On 5.11.2016 8:15, Popping mad wrote: > std::string _nam; > cost _r; > }; /* ----- end of class State ----- */ The 'inline' is redundant in this example, it is just adding noise. Using 'cost' for a template type parameter seems disconcerting. To me, 'cost' is something which has e.g. value 12, not something which has a value like a type 'int'. Maybe it should be named smth like CostCalculationPolicy? > I want to use it for a vector type in another class. In order to do this, I seem to have to make the second class > also a template, which doesn't seem right. But I have to knwo the unknow template type prior to constructing the vectors A template is not a class. Template is a compile-time prescription for making many classes. You cannot put templates into some concrete std::vector as the templates exist only at compile time and a concrete instance of std::vector exists only at run time. Indeed, what you can do is to make another prescription (template) which prescribes how to use your abstract class template with another abstract class template (std::vector). It appears this is what you have. Another option is to fix the template parameter, so that you get an instantiated actual class: void foo() { std::vector<state<int>> vstate; // vstate is an instance of a concrete class } At some point one needs to fix the template types anyway, otherwise the program would not be able to do anything at run-time. It's up to you where and how to do that, in principle the whole program could be templates and main() could contain a single instantiation of them. HTH Paavo |
Popping mad <rainbow@colition.gov>: Nov 05 02:20PM On Sat, 05 Nov 2016 10:34:33 +0200, Paavo Helde wrote: > The 'inline' is redundant in this example, it is just adding noise. Thank you Paavo/ Why is it redundent here? > Using 'cost' for a template type parameter seems disconcerting. To me, > 'cost' is something which has e.g. value 12, not something which has a > value like a type 'int'. Like a constant instead of a template value? Why do you say that? FWIW, this is supposed to eventually do the Fitch/Sankoff algorithm for Phylogenetics. I want to template it so that I can cook up different mechanism for cost determination on the same scafling of this work, and do some comparing. > Maybe it should be named smth like > CostCalculationPolicy? <== i really don't like long variable names. It is not really the policy though, but the numeric value. I'm starting with ints, but I can see possible needs for using floats later, or even get more flexible. I do see your point though. Quote<<A template is not a class. Template is a compile-time prescription for making many classes. You cannot put templates into some concrete std::vector as the templates exist only at compile time and a concrete instance of std::vector exists only at run time.>> What I thought would happen is that the compiler would substitute in the code, first for the inner template, and then for the outer one, but I suppose that would mean the g++ needs to do multiple passes in the compile, which it may, or may not do. vector is also a template so it is also in existence on at compile time? Is that right? Is there really no creation of a datatype called vector on compilation? Are vectors run time embodiment in the stack, or on the heap Quote<< Indeed, what you can do is to make another prescription (template) which prescribes how to use your abstract class template with another abstract class template (std::vector). It appears this is what you have.>> Yeah I thought the compiler would pick that up without the explicit direction. This is a big limitation. Quote <<Another option is to fix the template parameter, so that you get an instantiated actual class: void foo() { std::vector<state<int>> vstate; // vstate is an instance of a concrete class } I think you lose your flexibility with state in that case. |
Paavo Helde <myfirstname@osa.pri.ee>: Nov 05 05:03PM +0200 On 5.11.2016 16:20, Popping mad wrote: > On Sat, 05 Nov 2016 10:34:33 +0200, Paavo Helde wrote: >> The 'inline' is redundant in this example, it is just adding noise. > Thank you Paavo/ Why is it redundent here? If you define a member function inside the class definition, it is implicitly considered 'inline'. > class template (std::vector). It appears this is what you have.>> > Yeah I thought the compiler would pick that up without the explicit direction. > This is a big limitation. It looks like you have some conceptual confusion about what are C++ templates and when one can and should use them. Saying that there are "big limitations" is like saying that human ear has big limitations because it does not distinguish colors. > // vstate is an instance of a concrete class > } > I think you lose your flexibility with state in that case. I see you snipped the most important part of my post where I mentioned that in some point in your code you must fix your types and instantiate the templates. If this does not suite your code, then maybe you should not use templates in the first place, but for example run-time polymorphism (derived classes and virtual functions). hth Paavo |
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page. To unsubscribe from this group and stop receiving emails from it send an email to comp.lang.c+++unsubscribe@googlegroups.com. |
No comments:
Post a Comment