我有一个带有以下签名的方法
template <typename T>
bool are_equal(T& lhs, T& rhs) { ... }
它只能采用非常量参数,因为它在仅提供非常量迭代器的旧式类上使用了一些STL算法。同时,API的其余部分在向shared_ptr's
或T
提供const T
的方式上是不一致的,因此我必须对lhs参数,rhs或两者都做很多are_equal(const_cast<T&>(*lhs_ptr), *rhs_ptr)
。
有没有一种方法(相对于4个重载方法),该方法可以采用T&
和const T&
参数(或shared_ptr<T>
/ shared_ptr<const T>
的任意组合,并始终将其转换为T&
在打电话给are_equal
之前吗?我曾尝试过std::conditional
和std::remove_const
,但无法到达任何地方。
您要做的就是const
限定所有内容(允许使用任何一种参数),然后使用const_cast
: