C++ class与基本类型的互转

class Int
{
public:
    Int(int x): x(x) {}          // int 转 Int
    operator int() { return x; } // Int 转 int
private:
    int x;
}

例如欲在(mathbb{F}_p)中进行运算, 预期效果为:

int result = Int<998244353>(1) * 2 / 3 + 4 - 5;

实现如下:

template <int P>
class Int
{
public:
    Int(int n = 0): n((n % P + P) % P) {};
    Int(long long n = 0): n((n % P + P) % P) {};
    operator int() { return (int)n; }
    Int<P> operator+(int x) { return n + x; }
    Int<P> operator-(int x) { return n - x; }
    Int<P> operator*(int x) { return n * x; }
    Int<P> operator/(int x) { return *this * Int<P>(x).pow(-1); }
    Int<P> pow(int x) {
        x = (x % (P-1) + P-1) % (P-1);
        long long ret = 1, N = n;
        for (; x; x >>= 1) {
            if (x & 1) ret = (ret * N) % P;
            N = (N * N) % P;
        }
        return ret;
    }
private:
    long long n;
};
原文地址:https://www.cnblogs.com/maoruimas/p/13741653.html