Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9e2824e

Browse files
author
mikhail_beris
committed
Using non-ODR violating placeholder implementation -- thanks to Joaquin Lopez Munoz of the Boost C++ Library community for the pointers -- instead of extern placeholders. Uses a similar approach used in Boost.None.
1 parent843a3a4 commit9e2824e

File tree

4 files changed

+70
-11
lines changed

4 files changed

+70
-11
lines changed

‎boost/network/message/transformers.hpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,25 @@
1414
#include<boost/network/message/transformers/selectors.hpp>
1515
#include<boost/network/message/transformers/to_upper.hpp>
1616

17+
#include<boost/type_traits.hpp>
18+
1719
namespaceboost {namespacenetwork {
1820
namespaceimpl {
1921
template<classAlgorithm,classSelector>
2022
structget_real_algorithm {
21-
typedeftypename Algorithm::template type<Selector> type;
23+
typedeftypename boost::function_traits<
24+
typename boost::remove_pointer<
25+
Algorithm
26+
>::type
27+
>
28+
::result_type::
29+
templatetype<
30+
typename boost::function_traits<
31+
typename boost::remove_pointer<
32+
Selector
33+
>::type
34+
>::result_type
35+
> type;
2236
};
2337

2438
template<classAlgorithm,classSelector>

‎boost/network/message/transformers/selectors.hpp

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,39 @@
99

1010
namespaceboost {namespacenetwork {
1111
namespaceselectors {
12-
structsource_selector { };
13-
structdestination_selector { };
12+
structsource_selector;
13+
structdestination_selector;
1414
};// namespace selectors
1515

16-
extern selectors::source_selector source_;
17-
extern selectors::destination_selector destination_;
16+
selectors::source_selectorsource_(selectors::source_selector);
17+
selectors::destination_selectordestination_(selectors::destination_selector);
18+
19+
namespaceselectors {
20+
structsource_selector {
21+
private:
22+
source_selector() {};
23+
source_selector(source_selectorconst &) {};
24+
friend source_selectorboost::network::source_(source_selector);
25+
};
26+
27+
structdestination_selector {
28+
private:
29+
destination_selector() {};
30+
destination_selector(destination_selectorconst &) {};
31+
friend destination_selectorboost::network::destination_(destination_selector);
32+
};
33+
};// namespace selectors
34+
35+
typedefselectors::source_selector (*source_selector_t)(selectors::source_selector);
36+
typedefselectors::destination_selector (*destination_selector_t)(selectors::destination_selector);
37+
38+
inline selectors::source_selectorsource_(selectors::source_selector) {
39+
returnselectors::source_selector();
40+
};
41+
42+
inline selectors::destination_selectordestination_(selectors::destination_selector) {
43+
returnselectors::destination_selector();
44+
};
1845

1946
};// namespace network
2047

‎boost/network/message/transformers/to_upper.hpp

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,30 @@ namespace boost { namespace network {
4949

5050
};// namespace impl
5151

52-
structto_upper_placeholder {
53-
template<classSelector>
54-
structtype :publicimpl::to_upper_transformer<Selector> { };
55-
} ;
52+
namespacedetail {
53+
structto_upper_placeholder_helper;
54+
};
55+
56+
detail::to_upper_placeholder_helperto_upper_(detail::to_upper_placeholder_helper);
57+
58+
namespacedetail {
59+
60+
structto_upper_placeholder_helper {
61+
template<classSelector>
62+
structtype :publicimpl::to_upper_transformer<Selector> { };
63+
private:
64+
to_upper_placeholder_helper() {};
65+
to_upper_placeholder_helper(to_upper_placeholder_helperconst &) {};
66+
friend to_upper_placeholder_helperboost::network::to_upper_(to_upper_placeholder_helper);
67+
};
68+
69+
};
70+
71+
typedefdetail::to_upper_placeholder_helper (*to_upper_placeholder)(detail::to_upper_placeholder_helper);
5672

57-
extern to_upper_placeholder to_upper_;
73+
inline detail::to_upper_placeholder_helperto_upper_(detail::to_upper_placeholder_helper) {
74+
returndetail::to_upper_placeholder_helper();
75+
};
5876

5977
};// namespace network
6078

‎libs/network/test/Jamfile.v2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ project network_test :
88
requirements
99
<include>../../../
1010
<source>/boost//unit_test_framework
11-
<link>static
11+
#<link>static
1212
;
1313

1414
unit-test message_test : message_test.cpp ;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp