diff options
author | Mirko Bonadei <mbonadei@webrtc.org> | 2019-11-04 16:31:08 +0100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-11-04 16:24:37 +0000 |
commit | 054f18513e9d0d64d53b972a1a00abc5ebc39b2d (patch) | |
tree | 3b113992cba1869076081a4dc84c8764411bdf50 /stats | |
parent | bb56d4b0e20db884b8393d34e55bb3ca257b6970 (diff) | |
download | webrtc-054f18513e9d0d64d53b972a1a00abc5ebc39b2d.tar.gz |
Use template instantiation declaration/definition for RTCStatsMember<T>.
This CL works around an "Explicit specialization after instantiation
error" when building with clang-cl and is_component_build=true (see
crbug.com/1018579). On top of that it uses "template instantiation
declarations/declarations" in order to avoid to instantiate the
template in clients code.
TBR: hbos@webrtc.org
Bug: webrtc:9419, chromium:1018579
Change-Id: I1b2862de678586afc81e8f7a407947322f8a06c4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158795
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Yves Gerey <yvesg@google.com>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29683}
Diffstat (limited to 'stats')
-rw-r--r-- | stats/rtc_stats.cc | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/stats/rtc_stats.cc b/stats/rtc_stats.cc index f5139a7dbb..92f64e4654 100644 --- a/stats/rtc_stats.cc +++ b/stats/rtc_stats.cc @@ -128,8 +128,9 @@ RTCStats::MembersOfThisObjectAndAncestors(size_t additional_capacity) const { #define WEBRTC_DEFINE_RTCSTATSMEMBER(T, type, is_seq, is_str, to_str, to_json) \ template <> \ - const RTCStatsMemberInterface::Type RTCStatsMember<T>::kType = \ - RTCStatsMemberInterface::type; \ + RTCStatsMemberInterface::Type RTCStatsMember<T>::StaticType() { \ + return type; \ + } \ template <> \ bool RTCStatsMember<T>::is_sequence() const { \ return is_seq; \ @@ -147,86 +148,87 @@ RTCStats::MembersOfThisObjectAndAncestors(size_t additional_capacity) const { std::string RTCStatsMember<T>::ValueToJson() const { \ RTC_DCHECK(is_defined_); \ return to_json; \ - } + } \ + template class RTC_EXPORT_TEMPLATE_DEFINE(RTC_EXPORT) RTCStatsMember<T> WEBRTC_DEFINE_RTCSTATSMEMBER(bool, kBool, false, false, rtc::ToString(value_), - rtc::ToString(value_)) + rtc::ToString(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(int32_t, kInt32, false, false, rtc::ToString(value_), - rtc::ToString(value_)) + rtc::ToString(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(uint32_t, kUint32, false, false, rtc::ToString(value_), - rtc::ToString(value_)) + rtc::ToString(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(int64_t, kInt64, false, false, rtc::ToString(value_), - ToStringAsDouble(value_)) + ToStringAsDouble(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(uint64_t, kUint64, false, false, rtc::ToString(value_), - ToStringAsDouble(value_)) + ToStringAsDouble(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(double, kDouble, false, false, rtc::ToString(value_), - ToStringAsDouble(value_)) -WEBRTC_DEFINE_RTCSTATSMEMBER(std::string, kString, false, true, value_, value_) + ToStringAsDouble(value_)); +WEBRTC_DEFINE_RTCSTATSMEMBER(std::string, kString, false, true, value_, value_); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<bool>, kSequenceBool, true, false, VectorToString(value_), - VectorToString(value_)) + VectorToString(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<int32_t>, kSequenceInt32, true, false, VectorToString(value_), - VectorToString(value_)) + VectorToString(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<uint32_t>, kSequenceUint32, true, false, VectorToString(value_), - VectorToString(value_)) + VectorToString(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<int64_t>, kSequenceInt64, true, false, VectorToString(value_), - VectorToStringAsDouble(value_)) + VectorToStringAsDouble(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<uint64_t>, kSequenceUint64, true, false, VectorToString(value_), - VectorToStringAsDouble(value_)) + VectorToStringAsDouble(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<double>, kSequenceDouble, true, false, VectorToString(value_), - VectorToStringAsDouble(value_)) + VectorToStringAsDouble(value_)); WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<std::string>, kSequenceString, true, false, VectorOfStringsToString(value_), - VectorOfStringsToString(value_)) + VectorOfStringsToString(value_)); } // namespace webrtc |