C++ “get_mpz_t()”可以省略吗?

C++ “get_mpz_t()”可以省略吗?,c++,gmp,C++,Gmp,关于mpz\u类类型,我一直在调用get\u mpz\u t()。我真的不明白这是什么意思。我有红色,据我所知,之所以需要红色是因为有些函数需要mpz_t,而不是mpz_类 为了复制文档中给出的示例,我发现我经常在这样的情况下调用它,但具有各种功能: mpz_class a, b, c; ... mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); 如果唯一的区别是语法,是否可以省略或自动执行,这样我就不必键入那么多?我比C++更熟悉C.

关于
mpz\u类
类型,我一直在调用
get\u mpz\u t()。我真的不明白这是什么意思。我有红色,据我所知,之所以需要红色是因为有些函数需要
mpz_t
,而不是
mpz_类

为了复制文档中给出的示例,我发现我经常在这样的情况下调用它,但具有各种功能:

mpz_class a, b, c;
...
mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t());

如果唯一的区别是语法,是否可以省略或自动执行,这样我就不必键入那么多?我比C++更熟悉C.

< p>为什么不写自己的包装函数?< /p>
inline void mpz_gcd(mpz_class& a, const mpz_class& b, const mpz_class& c)
{
    mpz_gcd(a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t());
}

如果这是C++,你甚至可以给包装函数和原来的名字相同。

为什么不写自己的包装函数?< /p>
inline void mpz_gcd(mpz_class& a, const mpz_class& b, const mpz_class& c)
{
    mpz_gcd(a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t());
}


如果这是C++,你甚至可以给包装函数和原件相同的名称。< /P>为什么你贴上这个C?@ KLutt?我想答案可能是与C. Hard兼容,如果你使用类,它就可以与C兼容。您可以从

mpz\u类
派生您自己的类,并给该类一个
操作符mpz\u t
。但是,这仍然不能为您提供从
mpz_类
的直接转换,因为您将有两个用户定义的转换。对于本例,您应该只编写
a=gcd(b,c)
。应该没有那么多的函数需要通过C接口(mulmod是最常见的,因为(a*b)%C没有扩展到mulmod)。为什么要标记这个C?@klutt我想答案可能与C兼容有关。如果你使用类,很难使它与C兼容;)您可以从
mpz\u类
派生您自己的类,并给该类一个
操作符mpz\u t
。但是,这仍然不能为您提供从
mpz_类
的直接转换,因为您将有两个用户定义的转换。对于本例,您应该只编写
a=gcd(b,c)
。应该没有那么多的函数需要通过C接口(mulmod是最常见的,因为(a*b)%C没有扩展到mulmod)。谢谢。虽然我发现它有很多不同的功能,例如mod pow、perfect power等。但我更想知道是否有人能证实我的理解,它只是语法是正确的?@northerner作者可以编写它,这样就可以自动从
mpz_类
转换到
mpz_t
(或
mpz_ptr
mpz_srcptr
)但是,启用这种自动转换常常会给代码带来歧义。这可能是原因。在库中既有代码< MPZYBASE 和 MPZYT,有什么意义?<代码> MPZYT < /Cord>是C兼容的,但需要您自己管理内存。<代码> MPZHORE < /COD>是用C++编写的,以使您免于内存。Y管理,但它是一个在代码> MPZYT 之上的层,而不是完全重写。所以两者都是因为它们服务于不同的需求。所以简单地说,<代码> MPZYT < /COD>是为C和<代码> MPZUBASE < /C> >为C++设计的。谢谢。虽然我发现它调用了很多不同的功能,例如MOD POW,完美的电源等等。我更想知道是否如此。我可以证实我的理解,它只是语法是正确的?@northerner作者可以编写它,这样就可以从
mpz_类
自动转换为
mpz_t
(或
mpz_ptr
mpz_srcptr
)但是,启用这种自动转换常常会给代码带来歧义。这可能是原因。在库中既有代码< MPZYBASE 和 MPZYT,有什么意义?<代码> MPZYT < /Cord>是C兼容的,但需要您自己管理内存。<代码> MPZHORE < /COD>是用C++编写的,以使您免于内存。Y管理,但它是一个在代码> MPZYT之上的层,而不是完全重写。因此,两者都存在,因为它们服务于不同的需求。所以简单地说,<代码> MPZYT < /COD>是为C和<代码> MPZU类< /代码>设计的C++语言?