我正在实现一个名为FingerprintBuffer
的类,用于存储指纹。每个指纹本质上只是一个字节数组。每个指纹的大小和缓冲区的容量是固定的,并且在编译时已知。我有两个选择:
模板化参数:
template <int FNGPRT_SIZE, int BUFFER_CAP>
class FingerprintBuffer {
public:
FingerprintBuffer() {
buff_ = new char[FNGPRT_SIZE * BUFFER_CAP]();
size_ = 0;
}
private:
char* buff_;
int size_;
};
FingerprintBuffer<36, 300> fngprt_buff;
或者构造函数参数:
class FingerprintBuffer {
public:
FingerprintBuffer(int fngprt_sz, int buff_cap) {
fngprt_sz_ = fngprt_sz;
buff_cap_ = buff_cap
buff_ = new char[fngprt_sz_ * buff_cap_]();
size_ = 0;
}
private:
int fngprt_sz_;
int buff_cap_;
char* buff_;
int size_;
};
FingerprintBuffer fngprt_buff(36, 300);
我应该选择哪个选项?一般来说,在哪些条件/假设下我应该选择模板化参数而不是构造参数?
最佳答案
我可以给你一个常见的用法。也就是说,如果像 FNGPRT_SIZE
这样的参数在运行时不会改变,则可以使用模板参数。如果参数在运行时会改变,则必须使用函数参数。
此外,模板参数可以节省内存(结构尺寸更小)并通过编译器获得常量优化。
通常,模板参数还可以为您提供编译时间检查。如果您实现矩阵多重播放,则可以将模板参数与 static_assert(COL_NUM, ROW_NUM)
一起用于两个矩阵。您可以及早发现错误。
关于c++ - 我什么时候应该使用模板化参数而不是构造参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56420526/