在viennacl库中,有一个叫C++:如何创建一个这样一个复杂类型的函数指针?
viennacl::linalg::element_tanh(some_vector)
节省了大量的代码行的功能,我想引用该函数的函数指针。这是不容易的,因为你会看到阅读)element_tanh执行(当:
#define VIENNACL_MAKE_UNARY_ELEMENT_OP(funcname) \
template<typename T> \
viennacl::matrix_expression<const matrix_base<T>, const matrix_base<T>, op_element_unary<op_##funcname> > \
element_##funcname(matrix_base<T> const & A) \
{ \
return viennacl::matrix_expression<const matrix_base<T>, const matrix_base<T>, op_element_unary<op_##funcname> >(A, A); \
} \
template<typename LHS, typename RHS, typename OP> \
viennacl::matrix_expression<const matrix_expression<const LHS, const RHS, OP>, \
const matrix_expression<const LHS, const RHS, OP>, \
op_element_unary<op_##funcname> > \
element_##funcname(matrix_expression<const LHS, const RHS, OP> const & proxy) \
{ \
return viennacl::matrix_expression<const matrix_expression<const LHS, const RHS, OP>, \
const matrix_expression<const LHS, const RHS, OP>, \
op_element_unary<op_##funcname> >(proxy, proxy); \
} \
VIENNACL_MAKE_UNARY_ELEMENT_OP(abs)
VIENNACL_MAKE_UNARY_ELEMENT_OP(acos)
VIENNACL_MAKE_UNARY_ELEMENT_OP(asin)
VIENNACL_MAKE_UNARY_ELEMENT_OP(atan)
VIENNACL_MAKE_UNARY_ELEMENT_OP(ceil)
VIENNACL_MAKE_UNARY_ELEMENT_OP(cos)
VIENNACL_MAKE_UNARY_ELEMENT_OP(cosh)
VIENNACL_MAKE_UNARY_ELEMENT_OP(exp)
VIENNACL_MAKE_UNARY_ELEMENT_OP(fabs)
VIENNACL_MAKE_UNARY_ELEMENT_OP(floor)
VIENNACL_MAKE_UNARY_ELEMENT_OP(log)
VIENNACL_MAKE_UNARY_ELEMENT_OP(log10)
VIENNACL_MAKE_UNARY_ELEMENT_OP(sin)
VIENNACL_MAKE_UNARY_ELEMENT_OP(sinh)
VIENNACL_MAKE_UNARY_ELEMENT_OP(sqrt)
VIENNACL_MAKE_UNARY_ELEMENT_OP(tan)
VIENNACL_MAKE_UNARY_ELEMENT_OP(tanh)
#undef VIENNACL_MAKE_UNARY_ELEMENT_OP
所以,类型这个功能可以使背部
viennacl::matrix_expression<const matrix_base<T>, const matrix_base<T>, op_element_unary<op_##funcname> >
如何创建一个函数指针如果第三个模板条目op_element_unary是#defined函数?
请妥善格式化,它看起来像编写代码凌乱风格凌乱的问题格式结合。很难得到这个观点。 – luk32
在C++看到这个声明的时候,第三个模板参数将是'op_tanh'。问题是什么? – rici
另外,你的代码简化需要满足'使用viennacl :: linalg :: element_tanh'吗? – rici