gpt4 book ai didi

c++ - 同时接受const和非const参数的模板方法

转载 作者:行者123 更新时间:2023-12-02 10:21:53 25 4
gpt4 key购买 nike

我有以下签名的方法

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

它只能采用非const参数,因为它在仅提供非const迭代器的旧类上使用了一些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::conditional,但实际上无法到达任何地方。

示例: 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));
}

关于c++ - 同时接受const和非const参数的模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com