IMP
2.0.1
The Integrative Modeling Platform
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
ExampleTemplateClass.h
Go to the documentation of this file.
1
/**
2
* \file IMP/example/ExampleTemplateClass.h
3
* \brief Show how to manage a template class with python.
4
*
5
* Copyright 2007-2013 IMP Inventors. All rights reserved.
6
*
7
*/
8
9
#ifndef IMPEXAMPLE_EXAMPLE_TEMPLATE_CLASS_H
10
#define IMPEXAMPLE_EXAMPLE_TEMPLATE_CLASS_H
11
12
#include <IMP/example/example_config.h>
13
14
#include <
IMP/utility.h
>
15
#include <
IMP/algebra/VectorD.h
>
16
17
IMPEXAMPLE_BEGIN_NAMESPACE
18
19
//! A line segment templated on the dimension.
20
/** Like the underlying
21
algebra::VectorD data, is not initialized when the default
22
constructor is used. Since it is a small class, it is designed to
23
be allocated on the stack and to be passed by value (or
24
const &).
25
26
The class should be named SegmentD, but it is an demostration.
27
28
The source code is as follows:
29
\include ExampleTemplateClass.h
30
*/
31
template
<
unsigned
int
D>
32
class
ExampleTemplateClassD
33
{
34
IMP::algebra::VectorD<D>
eps_[2];
35
public
:
36
ExampleTemplateClassD
(){}
37
/** Since it is a simple object, there is no reason to provide
38
methods to change the data.
39
*/
40
ExampleTemplateClassD
(
const
IMP::algebra::VectorD<D>
&a,
41
const
IMP::algebra::VectorD<D>
&b){
42
eps_[0]= a;
43
eps_[1]= b;
44
}
45
//! Get one of the endpoints
46
const
IMP::algebra::VectorD<D>
&
get_point
(
unsigned
int
i)
const
{
47
IMP_USAGE_CHECK
(i < 2,
"The endpoint index can only be 0 or 1"
);
48
return
eps_[i];
49
}
50
51
IMP_SHOWABLE_INLINE
(
ExampleTemplateClassD
, out << eps_[0] <<
" "
<< eps_[1];);
52
};
53
54
typedef
ExampleTemplateClassD<3> ExampleTemplateClass3D;
55
typedef
base::Vector<ExampleTemplateClassD<3>
> ExampleTemplateClass3Ds;
56
57
IMPEXAMPLE_END_NAMESPACE
58
59
#endif
/* IMPEXAMPLE_EXAMPLE_TEMPLATE_CLASS_H */