gpt4 book ai didi

c++ - C++中的template 想法可能吗?

转载 作者:行者123 更新时间:2023-12-02 10:51:05 26 4
gpt4 key购买 nike

我正在尝试学习在C++中实现template。当我将我的NTT(数字理论转换)代码更改为使用template的代码时,如下所示:

template <long long mod> struct NTT{
int x = 0;
NTT(){
long long p = mod-1;
while(!(p % 2)){
p >>= 1;
++x;
}
}
const static long long root_pw = 1 << x;
//(there is a function after this that also needs to read the value 'root_pw')
};

signed main()
{
NTT<998244353> ntt1;
vector<long long> a(ntt1::root_pw,0);
}

它告诉我制作x static

当我这样做时,它告诉我制作x const,这击败了x首先出现在其中的原因。

如果有帮助,我使用(GNU C++ 11)和我的编译器(Dev-C++ 5.11)进行配置(TDM-GCC 4.9.2 64位发行版)。

我真的很想完成这项工作,但我不知道如何做。

这可能很简单,但是我到底想念什么?

先感谢您。

最佳答案

您可以替换C++ 14函数

template <long long mod>
constexpr int f()
{
int x = 0;
long long p = mod-1;
while(!(p % 2)){
p >>= 1;
++x;
}
return x;
}

通过C++ 11版本:
template <long long p>
constexpr int f2()
{
return p % 2 ? 0 : 1 + f2<p / 2>();
}

template <long long mod>
constexpr int f()
{
return f2<mod - 1>();
}

所以
template <long long mod>
struct NTT{
constexpr static const long long root_pw = 1LL << f<mod>();

};

Demo

关于c++ - C++中的template <int…>想法可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59995457/

26 4 0