【发布时间】:2021-03-22 17:19:02
【问题描述】:
在现代 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);
}
已经有人问过类似的问题:https://stackoverflow.com/a/49025839/11857122
但该解决方案使用 SFINAE。我们可以省略该机制并使用像if constexpr 等更简单的东西吗?
【问题讨论】:
-
std::cout << std::vector究竟会做什么?如果您删除该行,则编译得很好,没有定义向量的<<运算符 -
我不想打印 std::vector 本身。我想打印 std::vector 的元素。
标签: c++ c++17 variadic-templates variadic-functions sfinae