C++ で、Ruby っぽいべき乗計算
Ruby では以下のコードで、べき乗の計算を行うことが出来ます。
puts 2 ** 3 # 8
と、いうことで、C++ でも書いてみました。
[ソース]
#include <cmath> #include <iostream> namespace detail{ template<typename T> struct pow_impl{ pow_impl(T const& t) : exponent_(t){} struct exponent{ exponent(T const& t) : value_(t){} T value_; }; exponent operator *() const{ return exponent_; } exponent exponent_; }; template<typename T, typename U> T operator *(T const& base, U const& exponent){ return std::pow(base, exponent.value_); } } // namespace detail template<typename T> detail::pow_impl<T> pow_(T const& t){ return detail::pow_impl<T>(t); } int main(){ std::cout << std::pow(2.0, 3) << std::endl; std::cout << 2.0 ** pow_(3) << std::endl; // 2.0 * (*pow_(3)) return 0; }
[出力]
8 8
pow_ でラップしないとダメなのが悲しいです。