$extrastylesheet
Olena
User documentation 2.1
An Image Processing Platform
Milena
Getting started
API Reference Manual
All Classes
Examples
Demos
Publications
All
Classes
Namespaces
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Groups
Pages
super.cc
1
// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
2
//
3
// This file is part of Olena.
4
//
5
// Olena is free software: you can redistribute it and/or modify it under
6
// the terms of the GNU General Public License as published by the Free
7
// Software Foundation, version 2 of the License.
8
//
9
// Olena is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
// General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Olena. If not, see <http://www.gnu.org/licenses/>.
16
//
17
// As a special exception, you may use this file as part of a free
18
// software project without restriction. Specifically, if other files
19
// instantiate templates or use macros or inline functions from this
20
// file, or you compile this file and link it with other files to produce
21
// an executable, this file does not by itself cause the resulting
22
// executable to be covered by the GNU General Public License. This
23
// exception does not however invalidate any other reasons why the
24
// executable file might be covered by the GNU General Public License.
25
26
#include <mln/trait/op/uminus.hh>
27
#include <mln/core/concept/object.hh>
28
#include <mln/value/int_u8.hh>
29
30
31
namespace
my
32
{
33
34
35
// Value.
36
37
template
<
typename
E>
struct
Value;
38
39
template
<>
struct
Value<void> {
typedef
mln::Object<void>
super; };
40
41
template
<
typename
E>
42
struct
Value
43
{
44
typedef
Value<void> category;
45
protected
:
46
Value() {}
47
};
48
49
50
// Integer.
51
52
template
<
typename
E>
struct
Integer;
53
54
template
<>
struct
Integer<void> {
typedef
Value<void> super; };
55
56
template
<
typename
E>
57
struct
Integer
58
{
59
typedef
Integer<void> category;
60
};
61
62
template
<>
63
struct
Integer<
int
>
64
{
65
typedef
Integer<void> category;
66
int
i;
67
Integer(
int
i) : i(i) {}
68
};
69
70
71
// Built_In.
72
73
template
<
typename
E>
struct
Built_In;
74
75
template
<>
struct
Built_In<void> {
typedef
void
* super; };
// cause several posible
76
77
78
// test.
79
80
struct
test
// like a built-in: no inheritance!
81
{
82
void
is_test() {}
83
};
84
85
// FIXME: Dead code?
86
// template <typename I>
87
// void foo(const Integer<I>&)
88
// {
89
// std::cout << "Int" << std::endl;
90
// }
91
92
// template <typename I>
93
// void foo(const Value<I>&)
94
// {
95
// std::cout << "Value" << std::endl;
96
// }
97
98
}
// my
99
100
101
102
namespace
mln
103
{
104
105
template
<>
106
struct
category< my::
test
>
107
{
108
typedef
my::Built_In< my::Integer<void> >
ret
;
109
};
110
111
// template <>
112
// struct category< int >
113
// {
114
// typedef my::Built_In< my::Integer<void> > ret;
115
// };
116
117
namespace
trait
118
{
119
120
template
<
typename
T>
121
struct
set_unary_< op::
uminus
, my::Integer,
T
>
122
{
123
typedef
bool
ret
;
124
};
125
126
}
// mln::trait
127
128
}
// mln
129
130
131
int
main()
132
{
133
using namespace
mln;
134
135
mln_trait_op_uminus_(my::test) tmp;
136
tmp = true;
137
(
void
) tmp;
138
139
// int i;
140
// my::foo<int>(i);
141
142
// mln_trait_op_plus_(value::int_u8, int) t;
143
// void* v = t;
144
}
tests
trait
super.cc
Copyright (C) 2012 EPITA Research and Development Laboratory (LRDE)