同时使用const和非const参数的模板方法

问题描述 投票:1回答:1

我有一个带有以下签名的方法

template <typename T>
bool are_equal(T& lhs, T& rhs) { ... }

它只能采用非常量参数,因为它在仅提供非常量迭代器的旧式类上使用了一些STL算法。同时,API的其余部分在向shared_ptr'sT提供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::conditionalstd::remove_const,但无法到达任何地方。

示例:http://coliru.stacked-crooked.com/a/243a98895aa4f6ce

c++ templates const c++17
1个回答
0
投票

您要做的就是const限定所有内容(允许使用任何一种参数),然后使用const_cast

© www.soinside.com 2019 - 2024. All rights reserved.