Move Subscribe* implementations to cc file

Subscribe* functions invoked from Chrome need to be in .cc files,
due to an issue with template expansion.

Bug: webrtc:4222260
Change-Id: I24005a96f88dd8cd0908902d3c127da5c1627f3a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407622
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45544}
diff --git a/p2p/base/ice_transport_internal.cc b/p2p/base/ice_transport_internal.cc
index d6a80e8..b37f0a1 100644
--- a/p2p/base/ice_transport_internal.cc
+++ b/p2p/base/ice_transport_internal.cc
@@ -255,4 +255,25 @@
   gathering_state_callback_list_.RemoveReceivers(removal_tag);
 }
 
+void IceTransportInternal::SubscribeCandidateGathered(
+    absl::AnyInvocable<void(IceTransportInternal*, const Candidate&)>
+        callback) {
+  candidate_gathered_trampoline_.Subscribe(std::move(callback));
+}
+
+void IceTransportInternal::SubscribeRoleConflict(
+    absl::AnyInvocable<void(IceTransportInternal*)> callback) {
+  role_conflict_trampoline_.Subscribe(std::move(callback));
+}
+
+void IceTransportInternal::SubscribeIceTransportStateChanged(
+    absl::AnyInvocable<void(IceTransportInternal*)> callback) {
+  ice_transport_state_changed_trampoline_.Subscribe(std::move(callback));
+}
+
+void IceTransportInternal::SubscribeDestroyed(
+    absl::AnyInvocable<void(IceTransportInternal*)> callback) {
+  destroyed_trampoline_.Subscribe(std::move(callback));
+}
+
 }  // namespace webrtc
diff --git a/p2p/base/ice_transport_internal.h b/p2p/base/ice_transport_internal.h
index d3bd319..5ca8fac 100644
--- a/p2p/base/ice_transport_internal.h
+++ b/p2p/base/ice_transport_internal.h
@@ -361,9 +361,7 @@
   }
   void SubscribeCandidateGathered(
       absl::AnyInvocable<void(IceTransportInternal*, const Candidate&)>
-          callback) {
-    candidate_gathered_trampoline_.Subscribe(std::move(callback));
-  }
+          callback);
 
   void SetCandidateErrorCallback(
       absl::AnyInvocable<void(IceTransportInternal*,
@@ -400,9 +398,7 @@
     SignalRoleConflict(transport);
   }
   void SubscribeRoleConflict(
-      absl::AnyInvocable<void(IceTransportInternal*)> callback) {
-    role_conflict_trampoline_.Subscribe(std::move(callback));
-  }
+      absl::AnyInvocable<void(IceTransportInternal*)> callback);
 
   // Emitted whenever the new standards-compliant transport state changed.
   sigslot::signal1<IceTransportInternal*> SignalIceTransportStateChanged;
@@ -410,9 +406,7 @@
     SignalIceTransportStateChanged(transport);
   }
   void SubscribeIceTransportStateChanged(
-      absl::AnyInvocable<void(IceTransportInternal*)> callback) {
-    ice_transport_state_changed_trampoline_.Subscribe(std::move(callback));
-  }
+      absl::AnyInvocable<void(IceTransportInternal*)> callback);
 
   // Invoked when the transport is being destroyed.
   sigslot::signal1<IceTransportInternal*> SignalDestroyed;
@@ -420,9 +414,7 @@
     SignalDestroyed(transport);
   }
   void SubscribeDestroyed(
-      absl::AnyInvocable<void(IceTransportInternal*)> callback) {
-    destroyed_trampoline_.Subscribe(std::move(callback));
-  }
+      absl::AnyInvocable<void(IceTransportInternal*)> callback);
 
   // Invoked when remote dictionary has been updated,
   // i.e. modifications to attributes from remote ice agent has