小编gan*_*ulo的帖子

C++ 中模板常量的默认值

我正在尝试将全局缓冲区大小替换为可修改以进行测试的缓冲区大小。当前的代码类似于:

static const uint32_t BUFFER_SIZE = 1 << 8;

class BufferWrapper {
.
.
.

char buffer_[BUFFER_SIZE];
};
Run Code Online (Sandbox Code Playgroud)

当我尝试更改测试的 BUFFER_SIZE 时,这会导致问题。因此,我希望使 BUFFER_SIZE 成为模板常量,并为该常量设置一个默认值,以便我只需要在测试期间指定它,例如:

static const uint32_t BUFFER_SIZE = 1 << 8;

template <uint_32 SIZE = BUFFER_SIZE>
class BufferWrapper {
.
.
.

char buffer_[SIZE];
};
Run Code Online (Sandbox Code Playgroud)

这样,以前的声明仍然可以像这样编译:

BufferWrapper buf
Run Code Online (Sandbox Code Playgroud)

但在测试过程中,我可以编写类似这样的代码来测试 1KB 的缓冲区:

BufferWrapper<1024> test_buf;
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以为模板值提供默认值,我该如何做?当我声明类似的内容时,我得到的错误BufferWrapper buf;是:

error: use of class template 'BufferWrapper' requires template arguments; argument deduction not allowed in function prototype
Run Code Online (Sandbox Code Playgroud)

c++ templates

3
推荐指数
1
解决办法
1171
查看次数

标签 统计

c++ ×1

templates ×1