小编Mic*_*hel的帖子

有没有办法一致地对类型模板参数进行排序?

我有一个类采用几个模板参数:

template<typename... ELEMENTS>
class MyContainer;
Run Code Online (Sandbox Code Playgroud)

根据定义,MyContainer<A, B, C>是与 不同的类型MyContainer<B, A, C>

但在这种情况下,我想避免这种情况:MyContainer<B, A, C>应该被认为与MyContainer<A, B, C>.

所以我认为“忽略”顺序的一种方法是标准化参数的顺序。有一些模板元编程的魔法,将变换<B, A, C>C, A, B><A, B, C>

但我找不到任何方法来实现这一目标。你能想到一个聪明的技巧来实现这一目标吗?

  • ELEMENTS作为模板参数传递从同一个基类继承所有,所以我可以加我想有任何静态成员。
  • 但是我正在处理的代码库没有启用 RTTI,所以我不能使用 typeid(尽管我认为它无论如何都不是 constexpr)。

c++ templates template-meta-programming

5
推荐指数
1
解决办法
101
查看次数

C++通过类型别名的不变性

使用using声明来创建类型的不可变版本是错误的,还是好的做法?

struct MutableA
{
  int i;
  float f;
};

using ImmutableA = const MutableA;
Run Code Online (Sandbox Code Playgroud)

对于指针或引用成员,像propagate_const这样的包装器将确保Immutable对象中的const安全性.

这样做的好处是将Mutable转换为Immutable类型(我推测)没有成本,并避免代码重复.

这是一个好习惯吗?这是错的吗 ?它没用吗?

c++ immutability using-declaration

2
推荐指数
1
解决办法
57
查看次数