All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
WithCmd.h
Go to the documentation of this file.
1 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2  Copyright (c) 2013 The plumed team
3  (see the PEOPLE file at the root of the distribution for a list of names)
4 
5  See http://www.plumed-code.org for more information.
6 
7  This file is part of plumed, version 2.0.
8 
9  plumed is free software: you can redistribute it and/or modify
10  it under the terms of the GNU Lesser General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  (at your option) any later version.
13 
14  plumed is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public License
20  along with plumed. If not, see <http://www.gnu.org/licenses/>.
21 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22 #ifndef __PLUMED_core_WithCmd_h
23 #define __PLUMED_core_WithCmd_h
24 
25 #include <string>
26 
27 namespace PLMD{
28 
29 /// Base for classes with cmd() method.
30 /// This is an abstract base class for classes with
31 /// cmd() method. It takes care of "const" cast, and
32 /// in the future it may be used to enforce some sort
33 /// of type checking on passed arguments.
34 class WithCmd{
35 public:
36  virtual ~WithCmd();
37 /// Const val version, which indeed just overrides the const and call the virtual method.
38  void cmd(const std::string& key,const void*val);
39 /// This has to be implemented in daughter classes.
40  virtual void cmd(const std::string& key,void*val=NULL)=0;
41 };
42 
43 inline
44 void WithCmd::cmd(const std::string& key,const void*val){
45 // this is nasty trick:
46  cmd(key,const_cast<void*>(val));
47 // in this manner, a const pointer can be used for val, allowing the user to pass
48 // arguments such as cmd("pippo","pluto")
49 // but here we override the const
50 }
51 
52 inline
54 // do nothing
55 // here just to allow inheriting from this class properly
56 }
57 
58 }
59 
60 #endif
Base for classes with cmd() method.
Definition: WithCmd.h:34
void cmd(const std::string &key, const void *val)
Const val version, which indeed just overrides the const and call the virtual method.
Definition: WithCmd.h:44
virtual ~WithCmd()
Definition: WithCmd.h:53