gpt4 book ai didi

c++ - 接受任何 STL 容器的函数

转载 作者:行者123 更新时间:2023-12-01 14:35:22 25 4
gpt4 key购买 nike

我需要实现一个接受任何 STL 容器的模板函数。并根据什么样的容器来执行某些 Action 。

示例:

template <class Container, class T>
void func(Container<T> container) {
if (container == std::map) {
...
} else {
...
}
}


int main() {
std::vector<int> v1;
func(v1); // ok
std::vector<double> v2;
func(v2); // ok
std::map<int, double> m1;
func(m1); // ok
std::list<int> l1;
func(l1); // ok
}

最佳答案

可以申请Constexpr If (C++17 起) (使用 std::is_same ) 在编译时检查类型,并应用 parameter pack (C++11 起)因为这些容器采用多个模板参数。例如

template <template <typename...> class Container, class... T>
void func(const Container<T...>& container) {
if constexpr (std::is_same_v<Container<T...>, std::map<T...>>) {
...
} else if constexpr (std::is_same_v<Container<T...>, std::vector<T...>>) {
...
} else if constexpr (std::is_same_v<Container<T...>, std::list<T...>>) {
...
} else {
...
}
}

PS:这取决于您的意图,但将参数更改为 pass-by-reference-to-const 以避免不必要的复制可能是个好主意。

关于c++ - 接受任何 STL 容器的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62038571/

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