@@ -34,33 +34,16 @@ namespace Cyan
3434 typedef vector<std::shared_ptr<IMessage>>::iterator iterator;
3535
3636 friend MessageChain& operator +(const string& str, MessageChain& mc);
37-
38- template <typename T>
39- friend MessageChain& operator +(T&& val, MessageChain& mc);
40-
41- template <std::size_t N>
42- friend MessageChain& operator +(const char (&str)[N], MessageChain& mc);
43-
37+ template <int N>
38+ friend MessageChain& operator +(const char (&str)[N], MessageChain&& mc);
4439 MessageChain ();
4540 MessageChain (const MessageChain& mc);
4641 MessageChain (MessageChain&& mc) noexcept ;
4742 MessageChain& operator =(const MessageChain& mc);
4843 MessageChain& operator =(MessageChain&& mc) noexcept ;
4944 MessageChain& operator +(const MessageChain& mc);
5045 MessageChain& operator +(const string& val);
51-
52- template <typename T>
53- MessageChain& operator +=(T&& val)
54- {
55- return this ->Add (std::forward<T>(val));
56- }
57-
58- template <std::size_t N>
59- MessageChain& operator +=(const char (&val)[N])
60- {
61- return this ->Add <PlainMessage>(val);
62- }
63-
46+ MessageChain& operator +=(const string& val);
6447 bool operator ==(const MessageChain& mc) const ;
6548 bool operator !=(const MessageChain& mc) const ;
6649 std::shared_ptr<IMessage> operator [](int i);
@@ -134,11 +117,6 @@ namespace Cyan
134117 return messages_.size ();
135118 }
136119
137- bool Empty () const
138- {
139- return Count () == 0 ;
140- }
141-
142120 void Clear ()
143121 {
144122 messages_.clear ();
@@ -240,18 +218,8 @@ namespace Cyan
240218 vector<std::shared_ptr<IMessage>> messages_;
241219 };
242220
243- template <typename T>
244- inline MessageChain& operator +(T&& val, MessageChain& mc)
245- {
246- using real_type = typename std::remove_const<typename std::remove_reference<T>::type >::type;
247- static_assert (std::is_base_of<IMessage, real_type>::value, " 只能接受 IMessage 的派生类" );
248- std::shared_ptr<IMessage> m_ptr (new real_type (std::forward<T>(val)));
249- mc.messages_ .insert (mc.messages_ .begin (), m_ptr);
250- return mc;
251- }
252-
253- template <std::size_t N>
254- inline MessageChain& operator +(const char (&str)[N], MessageChain& mc)
221+ template <int N>
222+ inline MessageChain& operator +(const char (&str)[N], MessageChain&& mc)
255223 {
256224 mc.messages_ .insert (mc.messages_ .begin (), std::make_shared<PlainMessage>(str));
257225 return mc;
@@ -262,6 +230,7 @@ namespace Cyan
262230 mc.messages_ .insert (mc.messages_ .begin (), std::make_shared<PlainMessage>(str));
263231 return mc;
264232 }
233+
265234}
266235
267236
0 commit comments