C++QEDElements  v2 Milestone 10
a framework for simulating open quantum dynamics – generic elements
details_BinaryInteractionGenerator.h
Go to the documentation of this file.
1 // Copyright András Vukics 2006–2014. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.txt)
3 // -*- C++ -*-
4 #ifndef CPPQEDELEMENTS_UTILS_DETAILS_BINARYINTERACTIONGENERATOR_H_INCLUDED
5 #define CPPQEDELEMENTS_UTILS_DETAILS_BINARYINTERACTIONGENERATOR_H_INCLUDED
6 
7 #include "SmartPtr.h"
8 
10 
11 #endif // CPPQEDELEMENTS_UTILS_DETAILS_BINARYINTERACTIONGENERATOR_H_INCLUDED
12 
13 
14 #ifndef BIG_ADDITIONAL_TEMPLATE_PARAMETERS
15 #define BIG_ADDITIONAL_TEMPLATE_PARAMETERS
16 #endif // BIG_ADDITIONAL_TEMPLATE_PARAMETERS
17 
18 #ifndef BIG_ADDITIONAL_TEMPLATE_PARAMETERS_PASS
19 #define BIG_ADDITIONAL_TEMPLATE_PARAMETERS_PASS
20 #endif // BIG_ADDITIONAL_TEMPLATE_PARAMETERS_PASS
21 
22 #ifndef BIG_ADDITIONAL_PARAMETERS
23 #define BIG_ADDITIONAL_PARAMETERS
24 #endif // BIG_ADDITIONAL_PARAMETERS
25 
26 #ifndef BIG_ADDITIONAL_PARAMETERS_PASS
27 #define BIG_ADDITIONAL_PARAMETERS_PASS
28 #endif // BIG_ADDITIONAL_PARAMETERS_PASS
29 
30 
31 #define BASE_class BIG_NAMESPACE_NAME::Base BIG_ADDITIONAL_TEMPLATE_PARAMETERS_PASS
32 
33 
34 template<BIG_ADDITIONAL_TEMPLATE_PARAMETERS typename AveragingType=EmptyAveragingBaseForInteractions>
35 class BIG_CLASS_NAME : public BASE_class, public AveragingType
36 {
37 public:
38 
39  template<typename F1, typename F2, typename... AveragingConstructorParameters>
40  BIG_CLASS_NAME(const F1& f1, const F2& f2 BIG_ADDITIONAL_PARAMETERS , AveragingConstructorParameters&&... a)
41  : BASE_class(cpputils::sharedPointerize(f1),cpputils::sharedPointerize(f2) BIG_ADDITIONAL_PARAMETERS_PASS),
42  AveragingType(std::forward<AveragingConstructorParameters>(a)...)
43  {}
44 
45 };
46 
47 
48 #undef BASE_class
49 
50 #undef BIG_ADDITIONAL_TEMPLATE_PARAMETERS_PASS
51 #undef BIG_ADDITIONAL_TEMPLATE_PARAMETERS
52 #undef BIG_ADDITIONAL_PARAMETERS_PASS
53 #undef BIG_ADDITIONAL_PARAMETERS
54 #undef BIG_NAMESPACE_NAME
55 #undef BIG_CLASS_NAME
const boost::shared_ptr< T > sharedPointerize(boost::shared_ptr< T > t)