gpt4 book ai didi

具有默认参数的 C++ 模板参数

转载 作者:可可西里 更新时间:2023-11-01 18:28:07 25 4
gpt4 key购买 nike

我有一个类需要使用某种 map 。默认情况下,我想使用 std::map,但我也想让用户能够根据需要使用不同的东西(例如 std::unordered_map 或甚至可能是用户创建的)。

所以我的代码看起来像

#include <map>

template<class Key, template<class, class> class Map = std::map>
class MyClass {
};

int main() {
MyClass<int> mc;
}

但是,g++ 提示

test.cpp:3:61: error: template template argument has different template parameters than its corresponding template template parameter
template<class Key, template<class, class> class Map = std::map>
^
test.cpp:8:14: note: while checking a default template argument used here
MyClass<int> mc;
~~~~~~~~~~~^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/map:781:1: note: too many template parameters in template template argument
template <class _Key, class _Tp, class _Compare = less<_Key>,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.cpp:3:21: note: previous template template parameter is here
template<class Key, template<class, class> class Map = std::map>
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.

所以看起来 g++std::map 有默认参数不满意。

有没有办法让 Map 成为可以接受至少两个模板参数的任何类型的模板?

如果可以的话,我宁愿坚持使用 C++98,但我对 C++11 持开放态度。

最佳答案

问题是您的模板模板参数只有两个模板参数,而 map 有四个。

template<class Key, template<class, class, class, class> class Map = std::map>
class MyClass {
};

或者

template<class Key, template<class...> class Map = std::map>
class MyClass {
};

Should compile .
但是,为了避免此类问题,请尝试使用map 类型,并通过相应的成员typedef 提取key 类型。例如

template <class Map>
class MyClass {
using key_type = typename Map::key_type;
};

关于具有默认参数的 C++ 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27333157/

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