相关疑难解决方法(0)

如何为一系列整数值专门化C++模板?

有没有办法根据一系列值而不是一个值进行模板专业化?我知道以下代码不是有效的C++代码,但它显示了我想要做的事情.我正在为8位机器编写代码,因此使用整数和字符的速度有所不同.

template<unsigned SIZE>
class circular_buffer {
   unsigned char buffer[SIZE];
   unsigned int head; // index
   unsigned int tail; // index
};

template<unsigned SIZE <= 256>
class circular_buffer {
   unsigned char buffer[SIZE];
   unsigned char head; // index
   unsigned char tail; // index
};
Run Code Online (Sandbox Code Playgroud)

c++ templates

41
推荐指数
3
解决办法
2874
查看次数

为什么我们使用非类型模板参数?

我理解这个概念,但我不知道为什么我需要使用非类型模板参数?

c++ templates arguments

4
推荐指数
1
解决办法
409
查看次数

C ++定义具有允许值的类型

我正在编写一个简单的类来在AVR微控制器上设置串行端口。有些参数只有几个有意义的值,例如波特率,奇偶校验类型或停止位数。因此,我想创建一个类型,整数的子集,可以是1或2。我可以创建一个枚举类型:

enum stopBits { one, two };
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种解决方案(拼写出波特率值吗?)。我想出了这个:

template<int vv> struct stopBits {
    static_assert( vv == 1 || vv == 2, "stop bit values can be 1 or 2");
    int value = vv;
};
// usage:
stopBits<2> s;
Run Code Online (Sandbox Code Playgroud)

我更喜欢这种方式,并且喜欢从编译器输出中获得有用的错误消息。我宁愿能够使用复制构造函数来初始化s:

// I'd like to have this
stopBits s = 2;
Run Code Online (Sandbox Code Playgroud)

这样,我将能够编写一个类似以下内容的类:

serial::serial(baudRate b, stopBits s = 1, parity p = none);
Run Code Online (Sandbox Code Playgroud)

在寻找解决方案时,我发现自己陷入了困境:模板参数推导,bounded :: integer库,不能为constexpr的函数参数thisthis。可以做到这一点,还是最好投降并继续前进?在此先感谢大家。

c++

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

如何在C++中手动抛出"溢出异常"?

我对异常很新.在我的程序的一部分中,如果某个特定变量超出某个值,我想手动抛出一个异常,该异常会说该变量超出了可接受的范围.变量为16位仍然可以保持"无效"值,但在正常的程序操作下,它只能保存它可以保存的可能值的子集.

如何生成此特定类型的异常?

c++ exception

0
推荐指数
1
解决办法
65
查看次数

标签 统计

c++ ×4

templates ×2

arguments ×1

exception ×1