gpt4 book ai didi

c++ - C++覆盖默认值小于特定数据类型的std::set的参数

转载 作者:行者123 更新时间:2023-12-01 14:57:00 29 4
gpt4 key购买 nike

我有很多创建std::set<Port*>的代码。现在默认情况下,它使用less<Port*>对指针值上的集合进行排序。这在我们的工具中造成了问题。我想为所有my_less提供默认的比较器set<Port*>,而不必去更改所有代码。所以我尝试了模板特化:

namespace std {
template<> class set<Port*> : public set<Port*, my_less> {};
};
我将此代码放在所有代码文件已包含的头文件中。这以我期望所有 set<Port*>现在都使用 my_less的方式工作。问题在于这样的特化没有继承构造函数。所以如果我想这样做我会得到一个错误:
std::set<Port*> myset_new(myset1.begin(), myset1.end());

set.cpp:53:63: error: no matching function for call to
‘std::set<Port*>::set(std::set<Port*, znl_id_less>::iterator, std::set<Port*, my_less>::iterator)’
set_include.h:27:70: note: candidates are: std::set<Port*>::set()
set_include.h:27:70: note: std::set<Port*>::set(const std::set<Port*>&)
解决此问题的好方法是什么(我可以为构造函数复制代码,但这似乎并不干净)。
除了:还有其他方法可以实现我正在尝试做的事情:
template<> class set<Port*> : public set<Port*, my_less> {};

最佳答案

从C++ 11开始,您可以使用using-declaration轻松继承构造函数,如下所示:

namespace std {
template<> class set<Port*> : public set<Port*, my_less> {
public: using set<Port*, my_less>::set;
};
};

关于c++ - C++覆盖默认值小于特定数据类型的std::set的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63822001/

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