将容器传递给可变模板函数
Pass container to a variadic template function
在现代 C++17 中,我们如何在下面的代码中将诸如 std::vector
的容器传递给可变参数模板函数?
template <typename... Args>
void foo(const Args&... args) {
for (const auto& arg : { args... })
std::cout << arg << ' ';
}
int main() {
foo(1, 2, 3);
std::vector vec{ 1, 2, 3 };
foo(vec);
}
已经有人问过类似的问题:
但该解决方案使用 SFINAE。我们可以省略该机制并使用更简单的东西,例如 if constexpr
等吗?
考虑到您的评论,这就是您调整代码以打印向量元素的方式
#include <iostream>
#include <vector>
template <typename... Args>
void foo(const Args&... args) {
for (const auto& arg : {args...}) {
std::cout << arg << ' ';
};
}
template <typename T>
std::ostream& operator<<(std::ostream& o, const std::vector<T>& v) {
for (const auto& x : v) {
o << x << ' ';
}
return o;
}
int main() {
foo(1, 2, 3);
std::vector vec{1, 2, 3};
foo(vec);
}
输出
1 2 3 1 2 3
在现代 C++17 中,我们如何在下面的代码中将诸如 std::vector
的容器传递给可变参数模板函数?
template <typename... Args>
void foo(const Args&... args) {
for (const auto& arg : { args... })
std::cout << arg << ' ';
}
int main() {
foo(1, 2, 3);
std::vector vec{ 1, 2, 3 };
foo(vec);
}
已经有人问过类似的问题:if constexpr
等吗?
考虑到您的评论,这就是您调整代码以打印向量元素的方式
#include <iostream>
#include <vector>
template <typename... Args>
void foo(const Args&... args) {
for (const auto& arg : {args...}) {
std::cout << arg << ' ';
};
}
template <typename T>
std::ostream& operator<<(std::ostream& o, const std::vector<T>& v) {
for (const auto& x : v) {
o << x << ' ';
}
return o;
}
int main() {
foo(1, 2, 3);
std::vector vec{1, 2, 3};
foo(vec);
}
输出
1 2 3 1 2 3