问题描述
我需要创建一个类 NumberModuloN
。对于每个正整数 N
,应该有一个不同的类。什么是最优雅的方式来做到这一点?
以下是更多详细信息:数据由 0
到 N-1
范围内的单个整数组成。可以使用一些公共运算符重载方法(如 +
、*
、-
、++
等)对其进行修改。
这个想法是,例如,numberModulo100
的对象与 numberModulo99
的任何对象都没有关系。加、减、乘它们没有意义。
我想到的一件事是为 N
使用一个常量变量,该变量在构造函数中初始化。这是对常量变量 https://stackoverflow.com/a/18775482/15360444 的引用。但问题是,现在,每个二元运算符方法都必须在继续之前检查两个操作数的 N
是否匹配。不是很优雅。
我需要类似于 C++ 模板的东西,它为每种数据类型提供不同的类。我只需要为每个正整数一个不同的类。
解决方法
您可能会在模板中使用非类型参数,例如:
template <std::size_t N>
struct NumberModuloN
{
/*..*/
};