在C++中,我们能为每个整数创建一个类吗?

3
我需要创建一个名为NumberModuloN的类,对于每个正整数N,都应该有一个不同的类。最优雅的方法是什么?
以下是更多细节:数据包括0N-1范围内的单个整数。可以使用一些公共的运算符重载方法(如+*-++等)进行修改。
这个想法是,例如,numberModulo100对象与numberModulo99对象没有任何关系。将它们相加、相减、相乘没有意义。
我想到的一件事是在构造函数中使用一个常量变量来表示N,并初始化它。这里有一个常量变量的参考:https://dev59.com/iXbZa4cB1Zd3GeqPJ8kj#18775482。但问题是,现在,每个二元操作符方法都必须检查两个操作数的N是否匹配,然后再进行操作。这不太优雅。
我需要类似于C ++ 模板的东西,为每种数据类型提供不同的类。我只需要每个正整数一个不同的类。

嗨,这是一个非常好的问题,但优雅性问题本质上是基于观点的。 - bartop
另请参见std::integral_constant - Caleth
1个回答

3
您可以在模板中使用非类型参数,例如如下代码:
template <std::size_t N>
struct NumberModuloN
{
    /*..*/
};

另外:您还可以为某些值专门定制此内容,例如 template <> struct NumberModuloN<0>;(不完整类型),以防止使用模数 0。 - Caleth
@Caleth:在这里似乎static_assert(N != 0)就足够了(或者是requires (N != 0))。但实际上它作为带有类型参数的模板。 - Jarod42
它能用。这正是我想要的。谢谢! - Arpita Korwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接