gpt4 book ai didi

c++ - 将 std::vector 重命名为另一个类以进行重载?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:15 26 4
gpt4 key购买 nike

看看这段代码。

#include <vector>

template<class ...Args>
using other_vector = std::vector<Args...>;

template<class T>
void f(std::vector<T>& ) {}
template<class T>
void f(other_vector<T>& ) {}

int main()
{
other_vector<int> b;
f(b);
return 0;
}

它不编译,因为f正在重新申报。我完全理解这个错误。但是,我需要一个行为类似于 std::vector<T> 的第二类,但将被视为不同的类型,因此如上例所示的重载将是合法的。

我能做什么?

  • 让新类(class)有std::vector<T>作为基类。这可能有效,但不应从标准容器继承。
  • 让新类有一个 std::vector 类型的成员,然后重新声明所有函数以重定向到该成员的函数。听起来工作量很大。

还有更好的选择吗?允许使用 C++11 或 C++14。

最佳答案

您可能会尝试弄乱分配器:

template<class T>
struct allocator_wrapper : T { using T::T; };

template<class T, class A = std::allocator<T>>
using other_vector = std::vector<T, allocator_wrapper<A>>;

Live example

关于c++ - 将 std::vector 重命名为另一个类以进行重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20973526/

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