|
Boost Users : |
From: chun ping wang (cablepuff_at_[hidden])
Date: 2006-08-03 03:54:12
Hey I have several problem...
A.) Can boost::python work with templated argument...
Example:
/************************************************
* rsa(p, q): *
* let n = p * q *
* let totient = (p-1)*(q-1) *
* choose integer e between 1 and totient *
* such that greatest common denominator is 1 *
* d = (1 mod totient) / e *
* return e, d, n *
************************************************/
template <class T>
boost::tuple<T, T, T> boost::rsa_generate(const T& p, const T& q)
{
BOOST_STATIC_ASSERT(boost::is_integral<T>::value);
assert(p != q);
const T n(p*q);
const T totient((p-1)*(q-1));
T e(3);
for (e; EuclidBinaryGCD(e, totient) != 1; e = Random::randint(T(2),
totient-1));
const T d(Inversemod(e, totient));
return boost::make_tuple(e, d, n);
}
BOOST_PYTHON_MODULE(rsa)
{
def("rsa_generate", boost::rsa_generate);
}
Second question.. how come lambda function don't work.
COmpling this by itself..give no error.
template <class T,
template <typename ELEM,
typename = std::allocator<ELEM> >
class CONT>
double MyAnn::getCondProb(const T& A, const T& B, const CONT<typename
std::pair<T, T> >& DATA)
{
using namespace boost::lambda;
typedef typename std::pair<T, T> MyPair;
// gets the number of B
const int numOfB (
std::count_if(DATA.begin(), DATA.end(),
bind(&MyPair::second, _1) == B
)
);
// gets the number of A given B.
const int numOfAGivenB(
std::count_if(DATA.begin(), DATA.end(),
(bind(&MyPair::second, _1) == B)
&&
(bind(&MyPair::first, _1) == A)
)
);
return (numOfAGivenB*1.0)/numOfB;
}
now including this file.. and compling this gives error about "_1"
BOOST_PYTHON_MODULE(bayesian)
{
def ("getCondProb", getCondProb<long long>);
}
Thanks for the help.
If its the way i compile.. how i would i get it to work.. iam using dev-cpp
4.9
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net