我有一个类采用几个模板参数:
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作为模板参数传递从同一个基类继承所有,所以我可以加我想有任何静态成员。使用using声明来创建类型的不可变版本是错误的,还是好的做法?
struct MutableA
{
int i;
float f;
};
using ImmutableA = const MutableA;
Run Code Online (Sandbox Code Playgroud)
对于指针或引用成员,像propagate_const这样的包装器将确保Immutable对象中的const安全性.
这样做的好处是将Mutable转换为Immutable类型(我推测)没有成本,并避免代码重复.
这是一个好习惯吗?这是错的吗 ?它没用吗?