一个模板方法,用于同时接受常量和非常量参数
A template method to take both const and non-const arguments
>我有一个带有以下签名的方法
template <typename T>
bool are_equal(T& lhs, T& rhs) { ... }
它只能接受非常量参数,因为它在仅提供非常量迭代器的遗留类上使用一些 STL 算法。同时,API 的其余部分不一致,因为它提供了对T
或const T
shared_ptr's
,所以我必须为 lhs 参数、rhs 或两者做很多are_equal(const_cast<T&>(*lhs_ptr), *rhs_ptr)
。
有没有办法有一个单一的方法(而不是 4 个重载的方法(,该方法将接受T&
和const T&
参数(或shared_ptr<T>
/shared_ptr<const T>
的任意组合,并始终在调用are_equal
之前将它们转换为T&
?我试过玩std::conditional
和std::remove_const
,但真的一无所获。
示例:http://coliru.stacked-crooked.com/a/243a98895aa4f6ce
您所要做的就是const
限定所有内容(允许任何一种参数(,然后使用const_cast
:
template <typename T>
bool are_equal(const T& lhs, const T& rhs) {
return detail::are_equal
(const_cast<T&>(lhs),
const_cast<T&>(rhs));
}
相关文章:
- 如何创建长度由常量参数指定的数组
- 常量参数"real"常量吗?
- 常量参数存储在哪里 (C++)?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 一个模板方法,用于同时接受常量和非常量参数
- 如何在使用 Qt5 构造函数时将非常量参数修改为常量参数?
- C++演示函数同时使用常量参数,即指针,这是为什么?
- C++函数中的常量参数
- 为什么一个方法对同一个变量有常量和非常量参数?
- 重载、常量参数、const_cast、const_cast<字符串 &>
- 提供带有常量参数的函数指针作为带有非常量参数的函数指针是否安全?
- 将函数赋值给函数指针,常量参数正确性
- 完美转发常量参数以进行持续评估
- 为什么重载"<<"需要一个常量参数?
- 我可以有常量参数包吗
- C++-常量参数和类变量是否令人讨厌
- 类的C++常量参数
- C++:复制构造函数,该构造函数使用具有非常量参数的函数
- C++日食给出了常量参数的"Invalid Arguments"
- 如果我使用非常量参数定义那些,我是否仍然会获得默认的复制构造函数和运算符 =