“ SFINAE反向,以避免模棱两可的过载

问题描述 投票:0回答:1

如果第二个模板实例化,如何防止下面的第一个模板实例化? (即是否同时定义了static_cast<T>(0)T::zero()

template<typename T>
auto zero() ->decltype(static_cast<T>(0)) {
    return static_cast<T>(0);
}

template<typename T>
auto zero() ->decltype(T::zero()) {
    return T::zero();
}
c++ templates c++14 sfinae
1个回答
0
投票
template <typename T> auto zero_helper(char) -> decltype(static_cast<T>(0)) { return static_cast<T>(0); } template <typename T> auto zero_helper(int) -> decltype(T::zero()) { return T::zero(); } template <typename T> auto zero() -> decltype(auto) { return zero_helper<T>(0); }
© www.soinside.com 2019 - 2024. All rights reserved.