SigUtil  0.95
Utility modules for modern C++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
binary_operation.hpp File Reference

スカラ変数とベクトル変数(+コンテナの種類)を気にせず使える二項演算関数 More...

Go to the source code of this file.

Namespaces

 sig
 

Functions

template<class OP , class T1 , class T2 , typename std::enable_if< (!impl::container_traits< typename impl::remove_const_reference< T1 >::type >::exist)&&(!impl::container_traits< typename impl::remove_const_reference< T2 >::type >::exist) >::type *& = enabler>
auto sig::binary_operation (OP &&func, T1 &&v1, T2 &&v2) -> typename impl::remove_const_reference< decltype(impl::eval(std::forward< OP >(func), std::forward< T1 >(v1), std::forward< T2 >(v2)))>::type
 二項演算 (scalar and scalar) More...
 
template<class OP , class C1 , class C2 , class CR1 = typename impl::remove_const_reference<C1>::type, class CR2 = typename impl::remove_const_reference<C2>::type, class AT1 = typename impl::forward_element<C1>::type, class AT2 = typename impl::forward_element<C2>::type, typename std::enable_if< impl::container_traits< CR1 >::exist &&impl::container_traits< CR2 >::exist >::type *& = enabler>
auto sig::binary_operation (OP &&func, C1 &&c1, C2 &&c2) -> typename impl::container_traits< CR1 >::template rebind< typename impl::remove_const_reference< decltype(impl::eval(std::forward< OP >(func), std::declval< AT1 >(), std::declval< AT2 >()))>::type >
 二項演算 (element-wise: container and container) More...
 
template<class OP , class C , class T , class CR = typename impl::remove_const_reference<C>::type, class ET = typename impl::forward_element<C>::type, typename std::enable_if< impl::container_traits< CR >::exist &&(!impl::container_traits< typename impl::remove_const_reference< T >::type >::exist) >::type *& = enabler>
auto sig::binary_operation (OP &&func, C &&c, T &&v) -> typename impl::container_traits< CR >::template rebind< typename impl::remove_const_reference< decltype(impl::eval(std::forward< OP >(func), std::declval< ET >(), v))>::type >
 二項演算 (element-wise: container and scalar) More...
 
template<class OP , class T , class C , class ET = typename impl::forward_element<C>::type, class CR = typename impl::remove_const_reference<C>::type, typename std::enable_if< (!impl::container_traits< typename impl::remove_const_reference< T >::type >::exist)&&impl::container_traits< CR >::exist >::type *& = enabler>
auto sig::binary_operation (OP &&func, T &&v, C &&c) -> typename impl::container_traits< CR >::template rebind< typename impl::remove_const_reference< decltype(impl::eval(std::forward< OP >(func), v, std::declval< ET >()))>::type >
 二項演算 (element-wise: scalar and container) More...
 
template<class T1 , class T2 >
auto sig::plus (T1 &&v1, T2 &&v2) -> decltype(binary_operation(plus_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 >
auto sig::minus (T1 &&v1, T2 &&v2) -> decltype(binary_operation(minus_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 >
auto sig::mult (T1 &&v1, T2 &&v2) -> decltype(binary_operation(mult_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 >
auto sig::div (T1 &&v1, T2 &&v2) -> decltype(binary_operation(div_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 , class TR1 = typename impl::remove_const_reference<T1>::type, class TR2 = typename impl::remove_const_reference<T2>::type, typename std::enable_if< impl::container_traits< TR1 >::exist||impl::container_traits< TR2 >::exist >::type *& = enabler>
auto sig::operator+ (T1 &&v1, T2 &&v2) -> decltype(binary_operation(plus_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 , class TR1 = typename impl::remove_const_reference<T1>::type, class TR2 = typename impl::remove_const_reference<T2>::type, typename std::enable_if< impl::container_traits< TR1 >::exist||impl::container_traits< TR2 >::exist >::type *& = enabler>
auto sig::operator- (T1 &&v1, T2 &&v2) -> decltype(binary_operation(minus_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 , class TR1 = typename impl::remove_const_reference<T1>::type, class TR2 = typename impl::remove_const_reference<T2>::type, typename std::enable_if< impl::container_traits< TR1 >::exist||impl::container_traits< TR2 >::exist >::type *& = enabler>
auto sig::operator* (T1 &&v1, T2 &&v2) -> decltype(binary_operation(mult_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 
template<class T1 , class T2 , class TR1 = typename impl::remove_const_reference<T1>::type, class TR2 = typename impl::remove_const_reference<T2>::type, typename std::enable_if< impl::container_traits< TR1 >::exist||impl::container_traits< TR2 >::exist >::type *& = enabler>
auto sig::operator/ (T1 &&v1, T2 &&v2) -> decltype(binary_operation(div_t(), std::forward< T1 >(v1), std::forward< T2 >(v2)))
 

Detailed Description

スカラ変数とベクトル変数(+コンテナの種類)を気にせず使える二項演算関数

Definition in file binary_operation.hpp.